Mysql索引失效的幾種場景 一定要注意

2021-08-21 22:20:38 字數 812 閱讀 8610

例如:一張user表   有欄位屬性 name,age   其中name為索引

下面列舉幾個索引失效的情況

1. select * from user where name=『xzz』 or age=16;

例如這種情況:當語句中帶有or的時候 即使有索引也會失效。

2.select *  from  user where name like『%xzz』 ;

例如這種情況:當語句索引 like 帶%的時候索引失效(注意:如果上句為 like『xzz』此時索引是生效的) 

3.select * from user where name=123;(此處只是簡單做個例子,實際場景中一般name不會為數字的)

例如這種情況:如果列型別是字串,那一定要在條件中將資料使用引號引用起來,否則不使用索引

4.如果mysql估計使用全表掃瞄要比使用索引快,則不使用索引(這個不知道咋舉例子了 )

5.假如上述將name和age設定為聯合索引,一定要注意順序,mysql聯合所以有最左原則,下面以name,age的順序講下

(1)select * from user where name=『xzz』 and age =11;

(2)select * from user where age=11 and name=『xzz』;

例如上訴兩種情況:以name,age順序為聯合索引,(1)索引是生效的,(2)索引是失效的

6.比如age為索引:select * from user where age-1>11;

例如這種情況:索引失效,不要在索引上進行操作,否則索引會失效(是有類似時間轉換的問題和上訴問題一樣)

MySQL索引失效的幾種場景

我們都知道建立索引能夠提高查詢效率,那麼是不是任何情況下都能提高呢,當然不是的的,下面我們就來列舉一些常見的索引失效的場景。在card code列沒加索引的時,查詢時間如下,大概都在0.07秒。我們來加上索引試試,加上後查詢效率高了許多。在正確使用索引的情況下,查詢一行資料的時間不到10毫秒,所以顯...

MySQL索引失效的幾種場景

我們來加上索引試試,加上後查詢效率高了許多。在正確使用索引的情況下,查詢一行資料的時間不到10毫秒,所以顯示0.00 sec 1.列型別是字串,查詢條件未加引號。card code列是身份證號,資料型別是varchar,在沒有將證件號碼用引號括起時不會使用索引,此時索引失效。2.未使用該列作為查詢條...

索引失效的幾種場景

在資料庫sql優化中,百分之80 的問題sql都可以通過索引來解決,但是有時候我們也會碰到一種情況,明明索引都有,為什麼mysql沒有選擇走索引而是走了全表掃瞄呢?近期就碰到乙個案例,同大家分析乙個當時的解決思路以及對索引失效的幾種情況總結一下 在乙個風和麗日的下午,突然一條高亮的釘釘資訊抖動在為眼...