我遇到了查询的执行时间。我有一个表(没有我写的)有很多行(4mio)和一个代表时间戳的列。 我想做一个只保留两个给定时间戳之间的数据的查询。
我目前正在使用:
SELECT * FROM myTable WHERE timestamp BETWEEN "x" AND "y"
此查询大约需要11秒才能返回4000行,而没有WHERE语句但限制为50&000,000行的查询将在不到0.1秒的时间内执行。我知道使用WHERE语句会测试更多行。
因为时间戳总是在增加,所以如果达到时间戳的上限,有没有办法停止查询?或者更快地运行相同查询的另一种方法是什么?
非常感谢
Kilian的
答案 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。