【发布时间】:2016-09-30 09:19:00
【问题描述】:
我有一个“事件”表
table events
id (pk, auto inc, unsigned int)
field1,
field2,
...
date DATETIME (indexed)
我正在尝试分析交通中的漏洞(一天中有 0 个事件的时刻)
我试试这种请求
SELECT
e1.date AS date1,
(
SELECT date
FROM events AS e2
WHERE e2.date > e1.date
LIMIT 1
) AS date2
FROM events AS e1
WHERE e1.date > NOW() -INTERVAL 10 DAY
需要很长时间
这里是解释
+----+--------------------+-------+-------+---------------------+---------------------+---------+------+----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+-------+-------+---------------------+---------------------+---------+------+----------+-------------+
| 1 | PRIMARY | t1 | range | DATE | DATE | 6 | NULL | 1 | Using where |
| 2 | DEPENDENT SUBQUERY | t2 | ALL | DATE | NULL | NULL | NULL | 58678524 | Using where |
+----+--------------------+-------+-------+---------------------+---------------------+---------+------+----------+-------------+
2 rows in set (0.00 sec)
在 MySQL 5.5 上测试
为什么 mysql 不能使用 DATE 索引?是因为子查询吗?
【问题讨论】:
-
events表中有多少行? -
约6000万
-
可能是错字WHERE e1 > NOW() -INTERVAL 10 DAY。应该是这样的:
WHERE e1.date > NOW() -INTERVAL 10 DAY -
我修复了查询(谢谢)
-
您能告诉我们您要做什么吗?可能正在重组查询可能使用索引。
标签: mysql optimization indexing subquery