gpt4 book ai didi

MySQL 没有使用正确的索引

转载 作者:行者123 更新时间:2023-11-30 21:43:31 25 4
gpt4 key购买 nike

我试图理解为什么 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) 唯一

Index02 => (id_user,hour,created_at)

我会做两种查询:

1) 其中 id_user=xxx

2) 其中 id_user=xxx and hour=x and created_at=curdate() and sent=1

第一个使用正确的索引 (index01) 但对于第二个,如果 and sent=1 存在,则 MySQL 不使用任何索引 -但没有 和 sent=1 MySQL 使用正确的索引 (index02)。

有人能告诉我原因吗?

最佳答案

当您将条件 onsent 添加到 WHERE 子句时,您将必须访问基表来评估该条件,因为它不是 index02 的一部分。如果有很多行满足条件,则扫描整个表而不是使用索引可能更有效。根据经验,转折点在 15% 左右。

另一种解释是它实际上是在使用索引,但是您将 EXPLAIN 的 Extra 列中缺少“使用索引”解释为未使用索引的指示。 “Using index”应该理解为“Using only index”,即根本不访问基表。是否使用索引,可以从EXPLAIN的key列中看出。

关于MySQL 没有使用正确的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50548544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com