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

2021-10-01 17:31:24 字數 996 閱讀 3796

sql語句where中如果有functionname(colname)或者某些運算,則mysql無法使用基於colname的索引。使用索引需要直接查詢某個字段。

索引失效的原因是索引是針對原值建的二叉樹,將列值計算後,原來的二叉樹就用不上了;

為了解決索引列上計算引起的索引失效問題,將計算放到索引列外的表示式上。

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

查詢語句:

select * from template t  where t.logicdb_id = 4 and t.sync_status = 1
2、建立聯合索引,where條件單字段。與上面情況正好相反

查詢語句:

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、對索引應用內部函式,這種情況下應該建立基於函式的索引。

select * from template t  where round(t.logicdb_id) = 1
6、查詢表的效率要比應用索引查詢快的時候。

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

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

在資料庫中做查詢等操作,經常發現查詢很慢,但是已經在列上建了索引,最後經過研究發現,很多種情況引起了索引失效。下面就對遇到的引起索引失效的原因做一下總結 不包括索引本身無效的情況 歡迎博友們補充。1 對單字段建了索引,where條件多欄位。例 建了以下索引 查詢語句 html view plain ...

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 在查詢條件上沒有使用引導列 ...