1.全值匹配,對索引中所有列都指定具體值。
2.最左字首法則,如果索引有多列,要遵循最左字首法則。指的是查詢從索引的最左前列開始,並且不跳過索引中的列。否者不走索引。
3.範圍查詢右邊的列,不走索引,應為mysql底層範圍查詢之後結構就斷了,就無法使用後面得索引了。
4.不要在索引列上進行運算操作,索引將失效
5.字串不加單引號,造成索引失效
6.盡量使用覆蓋索引,避免select *
盡量使用覆蓋索引(只訪問索引的查詢(索引列完全包含查詢列)),減少select *。
查詢列,超過索引列,也會降低效能,應為還是需要回表查詢
7.用or分割開的條件,索引都不會用到。
即不走索引。
8.以%開頭的like模糊查詢,索引失效。
如果僅僅是尾部模糊匹配,索引不會失效,如果是頭部模糊匹配,索引失效
可以通過覆蓋索引來解決這類問題,如果超過索引列也失效
9.如果mysql評估使用索引比全表掃瞄更慢,則不使用索引。
如果某一條資料占用的比例特別大,幾乎覆蓋了所有,mysql評估使用索引比全表掃瞄慢,則不走索引。
10.is null,is not null 有時索引失效
如果為null的資料比例特別大則不走索引
如果is not null的資料比例特別大時則不走索引
應為mysql底層做了優化,如果某一條資料占用的比例特別大,幾乎覆蓋了所有,mysql評估使用索引比全表掃瞄慢,則不走索引。
11.in走索引,not in索引失效
12.單列索引和復合索引。
盡量使用復合索引,而少使用單列索引。
如果建立的是單列索引資料庫會選擇最優的乙個索引來使用,而不會選擇全部索引。哪個辨識度高選哪個。
怎麼避免索引失效
首先在接著 之前,我們先說一下,如何判斷資料庫的索引是否生效!相信大家應該猜到了,就是explain!explain顯示了mysql如何使用索引來處理select語句以及連線表。他可以幫助選擇更好的索引和寫出更優化的查詢語句。例如我們有一張表user,為name列建立索引name index,如下所...
如何避免索引失效
全值匹配 最佳左字首法則 如果索引了多列,要遵守最左字首法則。指得時查詢從索引的最左前列開始並且不跳過索引中的列 不在索引列上左任何操作 計算 函式 自動or手動 型別轉換 因為在索引列上做操作會導致索引失效而轉向全表掃瞄 儲存引擎不能使用索引中範圍條件右邊的列 盡量使用覆蓋索引 只訪問索引的查詢 ...
這樣寫sql避免索引失效
合理地對資料表加索引可以大大加快資料的訪問效率,但索引也不是對任何查詢都有效,如果sql的結構不當,也會發生索引失效。所以為避免採坑,寫下此文,作為記錄。下面的例子是在mysql中建立的一張表,建表語句如下 create table user info id bigint 32 not null,n...