我们在应用程序中有一个表,这个表非常庞大。容易上百万行。
结构基本如下:
SERIES_ID | YEAR | DAY_SINCE_EPOCH | HOUR | MINUTE | VALUE
我们在YEAR和DAY_SINCE_EPOCH上有索引。
问题是某些类型的查询非常慢,例如:
SELECT
...
WHERE
SERIES_ID = 3 AND
DAY_SINCE_EPOCH < 16000 AND
YEAR = 2012
ORDER BY
DAY_SINCE_EPOCH DESC,
HOUR DESC,
MINUTE DESC
LIMIT 1
在一个包含2M行的表中大约需要10秒,在一个包含18M行的表中大约需要20秒。
目的是在第16000天之前找到系列3的最后一条记录.YEAR = 2012是为了加快查找速度。
所以我想知道,我们是否设置了正确的索引?没有年度指数,也许会更快?或者添加SERIES_ID索引或类似的东西?
或者只是重组查询会有帮助吗?
欢迎任何想法如何加快搜索速度!
答案 0 :(得分:3)
此索引可能有所帮助:
> create index on your_table(series_id, day_since_epoch, year);
答案 1 :(得分:0)
检查这些条件
SERIES_ID = 3 AND
DAY_SINCE_EPOCH < 16000 AND
YEAR = 2012
当您更新表格时(例如保存新记录)然后将真/假信息保存在“位”列中,然后检查它就像
where checked=1 .....
SERIES_ID | YEAR | DAY_SINCE_EPOCH | HOUR | MINUTE | VALUE | checked