Mysql 日期索引(列)
如果我使用以下内容比较Mysql 日期索引(列),mysql,sql,Mysql,Sql,如果我使用以下内容比较日期和日期时间 SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29' 我仍然可以在开始时间上使用索引吗 创建索引后: create index mi_date on calendar(startTime); 解释结果: +----+-------------+--------------+-------+---------------+---------+---------+------+------
日期
和日期时间
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29'
我仍然可以在开始时间上使用索引吗
创建索引后:
create index mi_date on calendar(startTime);
解释结果:
+----+-------------+--------------+-------+---------------+---------+---------+------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------+-------+---------------+---------+---------+------+------+--------------------------+
| 1 | SIMPLE | calendar | index | NULL | mi_date | 6 | NULL | 25 | Using where; Using index |
+----+-------------+--------------+-------+---------------+---------+---------+------+------+--------------------------+
带着疑问
SELECT * FROM `calendar` WHERE startTime like '2010-04-29 %'
解释cmd:
+----+-------------+--------------+-------+---------------+---------+---------+------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------+-------+---------------+---------+---------+------+------+--------------------------+
| 1 | SIMPLE | calendar | index | mi_date | mi_date | 6 | NULL | 25 | Using where; Using index |
+----+-------------+--------------+-------+---------------+---------+---------+------+------+--------------------------+
第一个解释之间的区别是列可能的\u键
不为空
还有一个问题:
SELECT * FROM `calendar` WHERE startTime BETWEEN '2010-04-29 00:00:00' AND '2010-04-29 23:59:59'
说明:
+----+-------------+--------------+-------+---------------+---------+---------+------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------+-------+---------------+---------+---------+------+------+--------------------------+
| 1 | SIMPLE | calendar | range | mi_date | mi_date | 6 | NULL | 16 | Using where; Using index |
+----+-------------+--------------+-------+---------------+---------+---------+------+------+--------------------------+
列类型为range,扫描的行数小于16行,这是我查询的结果
p、 s:我的表中有25行。您可以在查询之前添加“解释”,这将报告正在使用的键。通常使用函数会禁用索引搜索,但您完全可以使用索引修改查询:
SELECT * FROM `calendar` WHERE startTime like '2010-04-29 %'
正如您在解释的结果中所看到的,在本例中(您的,使用date(..),mysql已经在使用索引了。检查ref字段:
ref–显示与索引比较的列或常量
在键列中命名。MySQL将选择一个常量值作为
根据查询执行计划对列本身进行比较。你可以
请参见下面给出的示例
哪个更好?在这一点上,它们必须是相同的。您可以尝试其他查询并查看rows字段
rows–列出为生成记录而检查的记录数
输出。这是另一个值得关注的重要专栏
查询,特别是对于使用联接和子查询的查询
检查行数较少的on是最好的。您可以知道,在查询之前添加“Explain”,这将报告正在使用的键。通常使用函数会禁用索引搜索,但您完全可以使用索引修改查询:
SELECT * FROM `calendar` WHERE startTime like '2010-04-29 %'
正如您在解释的结果中所看到的,在本例中(您的,使用date(..),mysql已经在使用索引了。检查ref字段:
ref–显示与索引比较的列或常量
在键列中命名。MySQL将选择一个常量值作为
根据查询执行计划对列本身进行比较。你可以
请参见下面给出的示例
哪个更好?在这一点上,它们必须是相同的。您可以尝试其他查询并查看rows字段
rows–列出为生成记录而检查的记录数
输出。这是另一个值得关注的重要专栏
查询,特别是对于使用联接和子查询的查询
检查行数较少的on是最好的。带EXPLAIN
mysql> EXPLAIN SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29'
您可以使用mysql检查索引。但是MySQl通常不使用使用日期()的索引
试一试
解释
mysql> EXPLAIN SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29'
您可以使用mysql检查索引。但是MySQl通常不使用使用日期()的索引
试一试
这是因为当使用小丑(%)时,必须使用“like”操作符而不是“=”。Editednow有效,如果你能告诉我这是否是更好的方法,我会用explain cmd更新我的问题。你已经得到了回答,他们很可能是一样的。这是因为当使用小丑(%)时,你必须使用“like”操作符,而不是“=”。Editednow它可以工作,我用explain cmd更新我的问题,如果你能告诉我这是否是更好的方法。你已经得到了回答,他们很可能是一样的。我用explain cmd更新我的问题你能告诉我mysql是否使用我的索引吗?看起来是这样,mysql使用了你的新索引。=>列:键入show index。此表包含多少行(从日历中选择计数(*)?25行。所以看起来,即使列类型显示索引,他也使用完全扫描。不是吗?不,MySQL并不真正使用索引,MySQL只是扫描索引以找到与您的查询匹配的行。这称为索引扫描,比表扫描()范围快,没有问题。但是解释会告诉你最好的方法。排得越少越好(越快)。当前表包含25行,查询扫描25行。也许只有一两场比赛。解释列行可能显示10行,这样更快。但是列行并没有显示确切的结果,这只是mysqli用explain cmd更新我的问题的猜测。你能告诉我mysql是否使用我的索引吗?看起来是这样,mysql使用了你的新索引。=>列:键入show index。此表包含多少行(从日历中选择计数(*)?25行。所以看起来,即使列类型显示索引,他也使用完全扫描。不是吗?不,MySQL并不真正使用索引,MySQL只是扫描索引以找到与您的查询匹配的行。这称为索引扫描,比表扫描()范围快,没有问题。但是解释会告诉你最好的方法。排得越少越好(越快)。当前表包含25行,查询扫描25行。也许只有一两场比赛。解释列行可能显示10行,这样更快。但是列行并没有显示确切的结果,这只是mysql的猜测。列键显示,mysql使用索引“mi_date”,他检查了25行中的16行。explain列类型中的索引将告诉您:“索引连接类型与ALL相同,只是索引树被扫描了。”因此,所有25行都被检查。列键显示,mysql使用索引“mi_date”,他检查25行中的16行。explain列类型中的索引将告诉您:“索引连接类型与ALL相同,只是索引树被扫描了。”因此,所有25行都被检查。