MySQL中為避免索引失效所需注意的問題

2022-01-10 02:31:16 字數 1634 閱讀 6927

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,如下所...