欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

Mysql中哪些場景下會導致使用了索引但索引失效

錢衛國2年前27瀏覽0評論
Mysql中哪些場景下會導致使用了索引但索引失效?

程序員應該都知道,為了提高數據庫的查詢速度,我們可以對表上的一個字段或者多個字段建立索引,但是有些 SQL 錯誤的寫法,可能會導致索引失效。

01. 查看執行計劃

如何判斷 SQL 的執行是做了全表掃描還是走了索引,不是憑感覺判斷 SQL 執行的快慢,而是要看 SQL 的執行計劃;很多工具都提供了查看執行計劃的功能,不過最原始的方法,還是通過 explain 進行查看;下面的 SQL,是否使用的索引,一目了然。

1. 沒有索引

explain select * from user where gender = 'M';

2. 有索引

explain select * from user where name = 'Tom';02. 索引失效

1. 使用 like 時,% 在前面不走索引(在后面可以走索引);

explain select * from user where name like '%om';

2. 數據類型出現隱式轉化,比如我們這里手機號 mobile 字段設置的是 varchar 類型,但是查詢的時候用的是數字,那么就【可能】不走索引。

explain select * from user where mobile = 13800000000;

3. 在索引字段上使用 not,<>,!= ;

explain select * from user where mobile <> '13800000000';explain select * from user where mobile != '13800000000';

4. 對索引字段上使用函數;

explain select * from user where length(mobile) < 10

5. 聯合索引,如果查詢條件不滿足最左匹配原則,則不會走索引;

6. or 會使索引失效,盡管 or 左右的條件都有索引;

explain select * from user where name = 'Tom' or mobile = '13800000000';

總之,MySQL 的索引優化和索引失效還是挺復雜的,主要體現在 MySQL 隨著版本升級,有一些我們熟知的技巧可能會不再正確,我們現在認為一定會索引失效的 SQL 寫法,可能會變成走索引,所以這也是為什么我在上文中,多次用到【可能】會造成索引失效的原因。

我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。