MySQL索引失效的幾種場景

2021-08-30 04:34:39 字數 1229 閱讀 6522

我們都知道建立索引能夠提高查詢效率,那麼是不是任何情況下都能提高呢,當然不是的的,下面我們就來列舉一些常見的索引失效的場景。

在card_code列沒加索引的時,查詢時間如下,大概都在0.07秒。

我們來加上索引試試,加上後查詢效率高了許多。

在正確使用索引的情況下,查詢一行資料的時間不到10毫秒,所以顯示0.00 sec .

1.列型別是字串,查詢條件未加引號。

card_code列是身份證號,資料型別是varchar,在沒有將證件號碼用引號括起時不會使用索引,此時索引失效。

2.未使用該列作為查詢條件

索引建在card_code列上,使用tel列作為查詢條件,此時該索引未被使用到,也可以說是失效的。

3.使用like時萬用字元在前

我們可以看到萬用字元在後面時效率不受影響,說明此時索引未失效,萬用字元在前時索引失效。

4. 在查詢條件中使用or

查詢條件中使用or會使索引失效,要想是索引生效,需要將or中的每個列都加上索引。

5.對索引列進行函式運算

6.聯合索引abc問題

mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是index (a,b,c),可以支援a | a,b| a,b,c 3種組合進行查詢,但不支援 b,c或c進行查詢 。

這裡只介紹6種比較常見的失效場景,實際上還有很多,我們在實際開發中要注意到這些問題,不能掉到坑里去了,哈哈^_^  。

MySQL索引失效的幾種場景

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

索引失效的幾種場景

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

mysql 索引失效場景 Mysql 索引失效場景

例如 一張user表 有欄位屬性 name,age 其中name為索引 下面列舉幾個索引失效的情況 1.select from user where name xzz or age 16 例如這種情況 當語句中帶有or的時候 即使有索引也會失效。2.select from user where na...