时间戳间隔的SQL查询:优化

时间:2015-08-18 14:19:24

标签: mysql optimization

我遇到了查询的执行时间。我有一个表(没有我写的)有很多行(4mio)和一个代表时间戳的列。 我想做一个只保留两个给定时间戳之间的数据的查询。

我目前正在使用:

SELECT * FROM myTable WHERE timestamp BETWEEN "x" AND "y"

此查询大约需要11秒才能返回4000行,而没有WHERE语句但限制为50&000,000行的查询将在不到0.1秒的时间内执行。我知道使用WHERE语句会测试更多行。

因为时间戳总是在增加,所以如果达到时间戳的上限,有没有办法停止查询?或者更快地运行相同查询的另一种方法是什么?

非常感谢

Kilian的

2 个答案:

答案 0 :(得分:0)

添加BTREE索引(处理SELECT KID FROM TableName t WHERE t.GRP IN('ABS', 'AOR') GROUP BY KID HAVING COUNT(DISTINCT t.GRP) = 2 的最佳方式,请参阅here):

BETWEEN

请发布

的结果
ALTER TABLE myTable ADD INDEX myIdx USING BTREE (`timestamp`)

之后。

答案 1 :(得分:0)

WHERE NumberModule=24 AND Timestamp BETWEEN 40764 AND 40772 

需要不同的索引:

INDEX(NumberModule, Timestamp)

我的Index Cookbook讨论了原因。

请提供SHOW CREATE TABLE,以便我们可以看到所有索引以及ENGINE。