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

來源:互聯網
上載者:User

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

http://blog.csdn.net/hehexiaoxia/article/details/54312130


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

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

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

例:建了以下索引:

查詢語句:

[html] view plain copy
  1. select * from template t  where t.logicdb_id = 4 and t.sync_status = 1  

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

例:建了以下索引:

查詢語句:

[html] view plain copy
  1. 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
  1. select * from template t  where ROUND(t.logicdb_id) = 1  
此時應該建ROUND(t.logicdb_id)為索引。

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

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

查看評論

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.