【发布时间】:2011-07-12 01:31:19
【问题描述】:
一个像下面这样的简单查询,在一个大约有 2M 行的表上正确索引,完成 95 rows in set (2.06 sec) 的时间比我希望的要长得多。
由于这是我第一次使用这种大小的表格,我是否正在调查正常行为?
查询:
SELECT t.id, t.symbol, t.feed, t.time,
FLOOR(UNIX_TIMESTAMP(t.time)/(60*15)) as diff
FROM data as t
WHERE t.symbol = 'XYZ'
AND DATE(t.time) = '2011-06-02'
AND t.feed = '1M'
GROUP BY diff
ORDER BY t.time ASC;
...和Explain:
+----+-------------+-------+------+--------------------+--------+---------+-------+--------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+--------------------+--------+---------+-------+--------+----------------------------------------------+
| 1 | SIMPLE | t | ref | unique,feed,symbol | symbol | 1 | const | 346392 | Using where; Using temporary; Using filesort |
+----+-------------+-------+------+--------------------+--------+---------+-------+--------+----------------------------------------------+
【问题讨论】:
-
你能同时显示你的索引和表结构吗?
-
就正常情况而言,通常您可以设置索引以消除对文件排序的需要,通常也可以设置临时表。但是,我不是那些能做到这一点的 MySQL 向导之一:P
-
尝试在
(symbol, time, feed)上创建密钥。也尽量不要在 where 子句中使用DATE()
标签: mysql sql query-optimization