1、優勢
2、劣勢
1、全值匹配
全值匹配 ,對索引中所有列都指定具體值。該情況下,索引生效,執行效率高。
2、最左字首法則
如果索引了多列,要遵守左字首法則。指的是查詢從索引的左前列開始,並且不跳過索引中的列。
建立索引的方式:
ⅰ、匹配最左字首法則,走索引
ⅱ、違背最左字首法則,索引失效
ⅲ、如果符合最左字首法則,但是出現跳躍某一列,則只有左列索引生效
3、範圍查詢右邊的列,不能使用索引
如下,範圍查詢之後的address沒有使用索引
4、不要在索引列上進行運算操作,索引將失效
5、字串不加單引號,造成索引失效
由於,在查詢時,沒有對字串加單引號,mysql的查詢優化器,會自動的進行型別轉換,造成索引失效。
6、盡量使用覆蓋索引,避免select *
7、or前面的列有索引,後面沒有,那麼索引不會被使用
示例,name 欄位是索引列 , 而 createtime 不是索引列,中間是 or 進行連線是不走索引的 :
8、以%開頭的like模糊查詢,索引失效
如果僅僅是尾部模糊匹配,索引不會失效。如果是頭部模糊匹配,索引失效。
解決方案:覆蓋索引
9、如果mysql評估使用索引比全表更慢,則不使用索引
10、is null,is not null有時索引失效
這裡索引失效的原因其實就是上面的第九條
11、in 走索引, not in 索引失效。
12、盡量使用復合索引,而少使用單列索引 。
2020-9-6
MySQL 中索引優化(即避免索引失效)
全值匹配 查詢欄位按順序在索引中都可以找到。最左字首法則 查詢欄位與索引欄位不同時,會導致索引失效,即如果索引了多列,則查詢欄位從索引最左前列開始,不要跳過已有索引列。不要再索引上做任何計算 包括計算 函式 自動或手動 型別轉換。索引列上不能有範圍 將可能做範圍查詢的字段放在索引順序的最後。盡量使用...
避免索引失效
1.全值匹配,對索引中所有列都指定具體值。2.最左字首法則,如果索引有多列,要遵循最左字首法則。指的是查詢從索引的最左前列開始,並且不跳過索引中的列。否者不走索引。3.範圍查詢右邊的列,不走索引,應為mysql底層範圍查詢之後結構就斷了,就無法使用後面得索引了。4.不要在索引列上進行運算操作,索引將...
怎麼避免索引失效
首先在接著 之前,我們先說一下,如何判斷資料庫的索引是否生效!相信大家應該猜到了,就是explain!explain顯示了mysql如何使用索引來處理select語句以及連線表。他可以幫助選擇更好的索引和寫出更優化的查詢語句。例如我們有一張表user,為name列建立索引name index,如下所...