SQL優化(2)-索引使用、設計規則
索引使用規則:設計
- 全值匹配,索引中全部列都指定具體值。該狀況下,索引生效,執行效率高。
- 最左前綴法則:若是索引了多列,要遵照最左前綴法則。指的是查詢從索引的最左前列開始,而且不跳過索引中的列。匹配最左前綴法則,走索引。違反最左前綴法則,索引失效。若是符合最左法則,可是出現跳躍某一列,只有最左列索引生效。
- 範圍查詢右側列,不使用索引
- 在索引上作運算操做,索引失效
- 字符串不加單引號,索引失效
- 使用or分隔開的條件,若是or前面使用索引列、後面沒有索引列,那麼涉及的索引都不會被用到
- 以%開頭的Like模糊查詢,索引失效。解決方案:經過覆蓋索引
- 若是MySQL評估使用索引比全表更慢,則不使用索引
- is NULL,is NOT有時索引失效。實驗中: NULL查詢條件中IS NULL,當命中結果數量小於40%的時候,會走索引。查詢條件中的IS NOT NULL,命中結果數小於30%的時候,會走索引。
- in,not in有時索引失效。
- 儘可能使用覆蓋索引,避免select *
索引設計原則:索引
- 對查詢頻次較高,且數據量比較大的表創建索引。
- 索引字段的選擇,最佳候選列應當從where子句的條件中提取,若是where子句中的組合比較多,那麼應當挑選最經常使用、過濾效果最好的列的組合。
- 使用惟一索引,區分度越高,使用索引的效率越高。
- 索引能夠有效的提高查詢數據的效率,但索引數量不是多多益善,索引越多,維護索引的代價天然也就水漲船高。對於插入、更新、刪除等DML操做比較頻繁的表來講,索引過多,會引入至關高的維護代價,下降DML操做的效率,增長相應操做的時間消耗。另外索引過多的話,MySQL也會犯選擇困難病,雖然最終仍然會找到一個可用的索引,但無疑提升了選擇的代價。使用短索引,索引建立以後也是使用硬盤來存儲的,所以提高索引訪問的I/O效率,也能夠提高整體的訪問效率。假如構成索引的字段總長度比較短,那麼在給定大小的存儲塊內能夠存儲更多的索引值,相應的能夠有效的提高MySQL訪問索引的I/O效率。
- 利用最左前綴,N個列組合而成的組合索引,那麼至關因而建立了N個索引,若是查詢時where子句中使用了組成該索引的前幾個字段,那麼這條查詢SQL能夠利用組合索引來提高查詢效率。
歡迎關注本站公眾號,獲取更多信息