1. 程式人生 > >MySQL索引注意事項

MySQL索引注意事項

索引使用注意:

JOIN 索引,所有匹配ON和where的欄位應建立合適的索引。

唯一值越多的欄位,使用索引的效果越好。設定聯合索引時,唯一值越多的,越應該放在“左側”。

如果可以在多個索引中進行選擇,MySQL通常使用找到最少行的索引,索引唯一值最高的索引。

建立索引index(part1,part2,part3),相當於建立了 index(part1),index(part1,part2)和index(part1,part2,part3)三個索引。

儘量使用 "inner join " 查詢替換子查詢條件中的 "in " ,防止由於資料量過大,引發資料庫掛起問題 

對智慧的掃描全表使用FORCE INDEX告知MySQL,使用索引效率更高。

查詢語句的where條件後邊使用 “!=”或“<>”時,索引不生效,和普通欄位一樣

查詢語句的where條件後邊使用字串函式或其他函式,索引不生效,和普通欄位一樣

使用連線(join)查詢時,只有在主鍵和外來鍵的資料型別相同時索引才會生效

查詢語句的where條件後邊使用Like關鍵字應注意,like '%jx%' 和 like '%jx'方式索引均不生效, like 'jx%'方式索引生效

索引基本語法
CREATE INDEX 索引名稱 ON 表名(欄位);
show index from 表名 ;
drop index 索引名稱 on 表名;

命名規則:

唯一性索引用uni_開頭,後面跟表名。一般性索引用ind_開頭,後面跟表名。


SQL語句優化規範 :
1. 使用mysql explain 對sql執行效率進行檢測 ,explain顯示了mysql如何使用索引來處理select語句以及連線表。可以幫助選擇更好的索引和寫出更優化的查詢語句。
1) 使用方法:在select語句前加上explain即可
2) explain 分析結果形式如下:
table | type | possible_keys | key | key_len | ref | rows | Extra

explain 分析結果形式中各屬性含義:
table :顯示這一行的資料是關於哪張表的

type :這是重要的列,顯示連線使用了何種型別。從最好到最差的連線型別為const、eq_reg、ref、range、indexhe和ALL

possible_keys :顯示可能應用在這張表中的索引。如果為空,沒有可能的索引。可以為相關的域從WHERE語句中選擇一個合適的語句

key :實際使用的索引。如果為NULL,則沒有使用索引。很少的情況下,MYSQL會選擇優化不足的索引。這種情況下,可以在SELECT語句中使用USE INDEX(indexname)來強制使用一個索引或者用IGNORE INDEX(indexname)來強制MYSQL忽略索引

key_len:使用的索引的長度。在不損失精確性的情況下,長度越短越好

ref:顯示索引的哪一列被使用了,如果可能的話,是一個常數

rows:MYSQL認為必須檢查的用來返回請求資料的行數

Extra  :返回的描述的意義