我在mysql的查询中遇到了问题。为了绘制图表,我用这个简单的结构创建了一个具有“X秒”间隔的临时表:
CREATE TEMPORARY TABLE intervals (date DATETIME NOT NULL PRIMARY KEY)并查询此选择:
SELECT COUNT(dt.Device) AS count, i.date
FROM intervals i LEFT JOIN device_tracker dt ON
i.date <= dt.date AND
i.date + INTERVAL X SECOND >= dt.date
GROUP BY i.dateDevice是主键,dt.date是索引。
对于device_tracker中的20000行和30-35次间隔,查询大约需要4-5秒。这正常吗?我能做点什么来提高速度吗?
以下是对此的解释:
id select_type table type possible_keys key key_len ref rows Extra
-------------------------------------------------------------------------------------------------------------------
1 SIMPLE i index NULL PRIMARY 8 NULL 29 Using index; Using temporary; Using filesort
1 SIMPLE dt ALL date NULL NULL NULL 21594 编辑:Last_time不存在,我使用的是日期。
发布于 2011-04-04 15:27:24
来自Galz的答复:
尝试使用HAVING而不是WHERE:SELECT ... LEFT JOIN ... GROUP BY ... HAVING i.date IS NOT NULL
啊,真灵。
发布于 2011-03-08 16:43:45
问题可能是Last_Time字段在device_tracker中。您可以在以下文件中同时尝试对date和last_time...as进行索引:
CREATE INDEX myGreatIdx ON device_tracker(date, Last_Time);https://stackoverflow.com/questions/5235434
复制相似问题