Mysql index使用事項

1,操作符和index關係

<>,!=,not in 不會使用index
<,<=,=,>,>=,between,in 可以使用索引
like 看情況,遵循最左原則就會用.
 like ‘%xxx%’不會用.
 like ‘xxx%’ 會用
or 看情況
 所有的or條件都必須是獨立索引,這樣纔會使用索引.
 可以用in或者union來替換or.
 where後面field不一樣的判斷用union,一樣的判斷用or.

2,數據類型和index關係

類型一定要匹配,否則使用不了index.
select * from test where mobile = 13711112222;
如果mobile是char或者varchar類型,那麼上面即使mobile字段設置了索引,也不會使用,注意類型匹配.要添加”: select * from test where mobile = ‘13711112222’;

3,索引列字段進行了函數操作,索引不會使用

如 where md5(password) = “xxxx”,所以不要在索引列上進行運算.

4,NULL會導致索引不可用,可以通過其他方式來表達,比如-1.

5,學會使用短索引,即建立“前綴索引”

對串列進行索引,如果可能應該指定一個前綴長度。例如,如果有一個CHAR(255)的列,如果在前10個或20個字符內,多數值是惟一的,那麼就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁盤空間和I/O操作。

6,當mysql一旦估計檢查的行數可能會“太多”,範圍查找優化將不會被使用,索引無效

select uid from users where registered < 1295001384;應避免這樣的大數據查詢

7.儘量借用覆蓋索引,減少select * from..語句使用

select uid,fuid from users where uid = 1223232; 把index的field正好按index順序輸出.index(uid,fuid)

8.order by子句,儘量使用index方式排序,避免使用filesort方式排序

MySQL支持二種方式的排序,FileSort和Index,後者效率高,它指MySQL掃描索引本身完成排序。FileSort方式效率較低。
ORDER BY滿足以下情況,會使用Index方式排序:
 a)ORDER BY 語句使用索引最左前列。
 b)使用Where子句與Order BY子句條件列組合滿足索引最左前列.

9.強制使用索引和禁止使用索引

1)強制使用索引: force index(index_name)

select * from table force index(PRI) limit 2;(強制使用主鍵)
select * from table force index(ziduan1_index) limit 2;(強制使用索引”ziduan1_index”)
select * from table force index(PRI,ziduan1_index) limit 2;(強制使用索引”PRI和ziduan1_index”)

2)禁止使用索引:ignore index(index_name)

select * from table ignore index(PRI) limit 2;(禁止使用主鍵)
select * from table ignore index(ziduan1_index) limit 2;(禁止使用索引”ziduan1_index”)
select * from table ignore index(PRI,ziduan1_index) limit 2;(禁止使用索引”PRI,ziduan1_index”)

10.mysql索引選擇,和IO操作數量有關

索引選擇性就是結果個數與總個數的比值。
用sql語句表示爲:
SELECT COUNT() FROM table_name WHERE column_name/SELECT COUNT() FROM table_name
一般來說(例如書 “SQL Tuning“),如果選擇性超過 20% 那麼全表掃描比使用索引性能更優(oracle)。
但MySQL是沒有計算索引的選擇性的,只是預測邏輯IO操作的數量,因此對於MySQL索引要慎重選擇。
參考鏈接:
http://database.51cto.com/art/201104/253568.htm
http://www.cnblogs.com/fanqi/p/6188093.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章