Mysql引起索引失效的原因總結

2021-08-14 22:02:06 字數 1183 閱讀 6536

在資料庫中做查詢等操作,經常發現查詢很慢,但是已經在列上建了索引,最後經過研究發現,很多種情況引起了索引失效。

下面就對遇到的引起索引失效的原因做一下總結(不包括索引本身無效的情況),歡迎博友們補充。

1、對單字段建了索引,where條件多欄位。

例:建了以下索引:

查詢語句:

[html]view plain

copy

select * from template t  where 

t.logicdb_id= 4

and 

t.sync_status= 1

2、建立聯合索引,where條件單字段。與上面情況正好相反。

例:建了以下索引:

查詢語句:

[html]view plain

copy

select * from template t  where 

t.sync_status= 4

3、對索引列運算,運算包括(+、-、*、/、!、<>、%、like'%_'(%放在前面)、or、in、exist等),導致索引失效。

4、型別錯誤,如欄位型別為varchar,where條件用number。

例:template_id欄位是varchar型別。

錯誤寫法:select * from template t where t.template_id = 1

正確寫法:select * from template t where t.template_id = '1'

5、對索引應用內部函式,這種情況下應該建立基於函式的索引。例:

[html]view plain

copy

select * from template t  where round(t.logicdb_id) = 1  

此時應該建round(t.logicdb_id)為索引。

6、查詢表的效率要比應用索引查詢快的時候。

7、is null 索引失效;is not null betree索引生效。導致的原因,個人認為應該是,mysql沒有在null寫進索引。還要看應用的資料庫而定。

Mysql引起索引失效的原因總結

sql語句where中如果有functionname colname 或者某些運算,則mysql無法使用基於colname的索引。使用索引需要直接查詢某個字段。索引失效的原因是索引是針對原值建的二叉樹,將列值計算後,原來的二叉樹就用不上了 為了解決索引列上計算引起的索引失效問題,將計算放到索引列外的...

Mysql引起索引失效的原因總結

1 對單字段建了索引,where條件多欄位。2 建立聯合索引,where條件單字段。與上面情況正好相反。最左原則 例如 索引 a.b.c。條件 ab,ac,a,都會生效,bc不會生效 3 對索引列運算,運算包括 like 放在前面 or in exist等 導致索引失效。4 型別錯誤,如欄位型別為v...

mysql 索引失效原因

1.隨著表的增長,where條件出來的資料太多,大於15 使得索引失效 會導致cbo計算走索引花費大於走全表 2.統計資訊失效 需要重新蒐集統計資訊 3.索引本身失效 需要重建索引 下面是一些不會使用到索引的原因 索引失效 1 沒有查詢條件,或者查詢條件沒有建立索引 2 在查詢條件上沒有使用引導列 ...