[英]MySQL isn't using the right index
我試圖理解為什么MySQL不使用正確的索引。
id int PK
id_user int
id_user_friend int
sent bool
hour int
created_at date
我創建了兩個索引:
Index01 => (id_user,id_user_friend) unique
Index02 => (id_user,hour,created_at)
我將進行兩種查詢:
1) where id_user=xxx
2) where id_user=xxx and hour=x and created_at=curdate() and sent=1
第一個使用正確的索引( index01
),但第二個使用if and sent=1
,則MySQL不使用任何索引-但不使用and sent=1
MySQL使用正確的索引(index02)。
有人可以給我原因嗎?
當您將條件添加到sent
到WHERE子句時,您將必須訪問基表以評估該條件,因為它不是index02的一部分。 如果有許多行滿足該條件,則掃描整個表而不是使用索引可能更有效。 根據經驗,斷點約為15%。
另一個解釋是它實際上正在使用索引,但是您將EXPLAIN的Extra列中缺少“使用索引”解釋為未使用索引的指示。 “使用索引”應解釋為“僅使用索引”,即根本不訪問基表。 從EXPLAIN的列key
可以看到是否使用索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.