mysql - Mysql 中的日期时间索引

标签 mysql indexing

这是表格

+------------+----------+------+-----+---------+-------+
| Field      | Type     | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| datecolumn | datetime | YES  | MUL | NULL    |       |
+------------+----------+------+-----+---------+-------+

表格中的数据

+---------------------+
| datecolumn          |
+---------------------+
| 2007-01-01 00:00:00 |
| 2007-01-03 00:00:00 |
| 2008-01-03 00:00:00 |
| 2009-01-03 00:00:00 |
| 2010-01-01 00:00:00 |
| 2010-01-02 00:00:00 |
| 2010-01-03 00:00:00 |
+---------------------+



EXPLAIN select * from test_date_index use key (datecolumn) where datecolumn>='2010-01-02 00:00:00';
+----+-------------+-----------------+-------+---------------+------------+---------+------+------+--------------------------+
| id | select_type | table           | type  | possible_keys | key        | key_len | ref  | rows | Extra                    |
+----+-------------+-----------------+-------+---------------+------------+---------+------+------+--------------------------+
|  1 | SIMPLE      | test_date_index | index | datecolumn    | datecolumn |  9     | NULL |    7 | Using where; Using index |
+----+-------------+-----------------+-------+---------------+------------+---------+------+------+--------------------------+
1 row in set (0.00 sec)

为什么mysql用7行取1行?

提前致谢!

最佳答案

它确实使用了索引。

它(很可能)不使用范围访问,因为表中的记录太少以至于搜索范围的第一条记录实际上比遍历索引和过滤值更昂贵。

当您向表中添加更多值时,将应用范围访问(因为现在认为它更便宜)并且 COUNT 显示 1,因为您只有一个记录满足条件。

关于mysql - Mysql 中的日期时间索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4527155/

相关文章:

mysql - 如何将 2 个查询作为单个查询同时运行

mysql - 在 MySQL 存储过程中创建 View 并集

mysql - min(column) 没有返回其他列的正确数据

sql - MySQL 忽略了我的索引

python - 如何在 python 中填充 pandas 数据框列中的剩余数值并作为索引?

database - 将转储 (.dmp) 文件导入 mysql

java - 如何从 Java 在 cmd 命令中输入

iphone - 关于核心数据中实体索引的问题

Javascript:在数组中查找对象的索引,不知道索引,只知道对象

c - 对于我的用例,最有效的位 vector 压缩方法是什么?