or導致索引失效的解決方法 索引失效的7種情況

2021-10-16 13:31:46 字數 1039 閱讀 6239

簡述

什麼時候沒用

1.有or必全有索引;

2.復合索引未用左列字段;

3.like以%開頭;

4.需要型別轉換;

5.where中索引列有運算;

6.where中索引列使用了函式;

7.如果mysql覺得全表掃瞄更快時(資料少);

什麼時沒必要用

1.唯一性差;

2.頻繁更新的字段不用(更新索引消耗);

3.where中不用的字段;

4.索引使用<>時,效果一般;

詳述***

索引並不是時時都會生效的,比如以下幾種情況,將導致索引失效:

如果條件中有or,即使其中有部分條件帶索引也不會使用(這也是為什麼盡量少用or的原因),例子中user_id無索引

注意:要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引

對於復合索引,如果不使用前列,後續列也將無法使用,類**簿。

like查詢是以%開頭

存在索引列的資料型別**轉換,則用不上索引,比如列型別是字串,那一定要在條件中將資料使用引號引用起來,否則不使用索引

where 子句裡對索引列上有數**算,用不上索引

where 子句裡對有索引列使用函式,用不上索引

如果mysql估計使用全表掃瞄要比使用索引快,則不使用索引

比如資料量極少的表

什麼情況下不推薦使用索引?

1) 資料唯一性差(乙個欄位的取值只有幾種時)的字段不要使用索引

比如性別,只有兩種可能資料。意味著索引的二叉樹級別少,多是平級。這樣的二叉樹查詢無異於全表掃瞄。

2) 頻繁更新的字段不要使用索引

比如logincount登入次數,頻繁變化導致索引也頻繁變化,增大資料庫工作量,降低效率。

3) 欄位不在where語句出現時不要新增索引,如果where後含is null /is not null/ like 『%輸入符%』等條件,不建議使用索引

只有在where語句出現,mysql才會去使用索引

4) where 子句裡對索引列使用不等於(<>),使用索引效果一般

or導致索引失效的解決方法 SQL優化之索引失效

盡量全值匹配 建表語句 create table t logs id int 10 not null auto increment,action varchar 100 default null,data varchar 2000 default null,author id int 10 defa...

Oracle索引失效原因及解決方法

1使用否定關鍵字 not in,not exist select fromdrama where id 1,mysql不會 2單獨使用不等式關鍵字 直接用 或 可能會失效,mysql不會 3使用null關鍵字 is null或is not null 可能會失效 4左模糊或全模糊 like 放在前面 ...

SQL導致的索引失效

我們在開發中會發現,明明我這條sql語句應該是用到了索引才對,但是為何速度仍然那麼慢,其實是你的sql寫的有問題導致了索引失效,我們來看下什麼情況下mysql的索引會失效 對查詢進行優化,盡量避免全表掃瞄,避免導致索引失效 避免在where子句中 的左邊使用表示式操作或者函式操作select id ...