很多面試官可能都不知道,mysql不滿足最左原則,真的會導致索引失效嗎?

前言

之前很多面試都被問過聯合索引不匹配最左原則失效的問題,當時一直以爲只要不滿足最左原則,聯合索引就會失效,面試官也沒有反饋過有什麼問題,今天突然發現一條sql並沒有遵循最左原則,但還是用到了聯合索引。

測試

表結構:

name和age字段建立聯合索引

查詢覆蓋索引命中的字段:

explain select age from test where age = 2644;

 查詢count(*) (不查詢具體字段):

explain select count(*) from test where age = 2644;

查詢非覆蓋索引的字段:

explain select status from test where age = 2644;

結論

  • 查詢非覆蓋索引字段時,不會使用索引
  • 查詢覆蓋索引字段時,會使用索引,但是掃描的行數仍然是全表,之所以使用索引,是因爲索引大小<全表大小(前提是覆蓋索引不是全部字段),所以可以有效減少IO,查詢優化器仍然會利用索引。
  • 查詢count(*)原理同上
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章