避免索引失效

2021-10-01 13:59:51 字數 1029 閱讀 5802

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...