sql查询索引无法正常工作

kxkpmulp  于 2021-06-18  发布在  Mysql
关注(0)|答案(22)|浏览(371)

我在索引方面遇到了一个问题。我不明白为什么索引有时对同一个查询不起作用。
在下面的案例中,索引正在工作

EXPLAIN SELECT `table_name`.* FROM `table_name`
WHERE (created_date between '2018-08-11' and '2018-08-11');

|id |选择|类型|表|分区|类型|

可能的|键|键|长度|参考|行|过滤|额外|

|1 |简单|表格|名称|空|索引|表格|名称|创建日期|表格|名称|创建日期| 4 |常量| 11 | 1.00 |使用索引条件;使用where |+

w1jd8yoj

w1jd8yoj5#

---+设置1行,1个警告(0.00秒)
有人能帮我处理这个案子吗?因此,我的查询需要更长的时间来执行。

wpx232ag

wpx232ag6#

-------| 1 | simple | table | name | null | all | index | table | name | u created | date null | null | null | 1233 | 0.30 |使用where+----+

mbjcgjjk

mbjcgjjk13#

这里的主要概念是 SELECT * 在您的表上,它告诉mysql您要为每个返回的记录返回表中的所有列。你可以在 created_date 列,mysql可以选择不使用它 SELECT * . 原因是,一旦mysql遍历b树到达每个叶节点,就只有 created_date 就在那里。对于其他列,mysql必须对聚集索引进行额外的查找,以获取其他列的数据。因此,使用索引可能无助于查询。
至于为什么在第一种情况下使用索引,优化器可能已经意识到只有一个匹配的记录,然后决定无论如何使用索引。实际上,如果从查询中返回许多记录,您的示例会更好。
下面是一个可以使用索引的查询示例:

SELECT created_date
FROM yourTable
WHERE created_date BETWEEN '2018-08-11' AND '2018-08-11';

在本例中,索引包含我们尝试选择的所有列。如果要选择另一列,请说 col1 ,然后您可以添加 col1 到索引(以便索引现在处于打开状态) (created_date, col1) ),然后以下查询也可以使用索引:

SELECT created_date, col1
FROM yourTable
WHERE created_date BETWEEN '2018-08-11' AND '2018-08-11';
pu82cl6c

pu82cl6c15#

--------+------+---------+------+------+

相关问题