Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 日期索引(列)_Mysql_Sql - Fatal编程技术网

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行都被检查。