簡體   English   中英

MySQL沒有使用正確的索引

[英]MySQL isn't using the right index

我試圖理解為什么MySQL不使用正確的索引。

tb_msgs

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM