我在索引方面遇到了一个问题。我不明白为什么索引有时对同一个查询不起作用。
在下面的案例中,索引正在工作
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 |+
22条答案
按热度按时间hjqgdpho1#
------+
dauxcl2d2#
------+
waxmsbnn3#
pkbketx94#
------+
w1jd8yoj5#
---+设置1行,1个警告(0.00秒)
有人能帮我处理这个案子吗?因此,我的查询需要更长的时间来执行。
wpx232ag6#
-------| 1 | simple | table | name | null | all | index | table | name | u created | date null | null | null | 1233 | 0.30 |使用where+----+
5ktev3wc7#
------+
mctunoxg8#
---------+
5rgfhyps9#
------+
qlfbtfca10#
------+
cmssoen211#
-+
azpvetkf12#
------+
mbjcgjjk13#
这里的主要概念是
SELECT *
在您的表上,它告诉mysql您要为每个返回的记录返回表中的所有列。你可以在created_date
列,mysql可以选择不使用它SELECT *
. 原因是,一旦mysql遍历b树到达每个叶节点,就只有created_date
就在那里。对于其他列,mysql必须对聚集索引进行额外的查找,以获取其他列的数据。因此,使用索引可能无助于查询。至于为什么在第一种情况下使用索引,优化器可能已经意识到只有一个匹配的记录,然后决定无论如何使用索引。实际上,如果从查询中返回许多记录,您的示例会更好。
下面是一个可以使用索引的查询示例:
在本例中,索引包含我们尝试选择的所有列。如果要选择另一列,请说
col1
,然后您可以添加col1
到索引(以便索引现在处于打开状态)(created_date, col1)
),然后以下查询也可以使用索引:jogvjijk14#
---+
pu82cl6c15#
--------+------+---------+------+------+