【发布时间】:2015-02-25 15:00:57
【问题描述】:
我的表刚才有超过 1500 万行。 我需要运行这样的查询:
SELECT ch1.* FROM citizens_dynamic ch1
WHERE ch1.id IN (4369943, ..., 4383420, 4383700)
AND ch1.update_id_to = (
SELECT MAX(ch2.update_id_to)
FROM citizens_dynamic ch2
WHERE ch1.id = ch2.id AND ch2.update_id_to < 812
)
基本上,对于IN 子句中的每个公民,它都会搜索最接近但低于指定update_id_to 的行。
在 2 列 update_id_to, id 上有 PRIMARY 键。
目前,此查询在 0.9 秒内执行(IN 子句中有 100 个 id)。
它仍然太慢,我需要运行我的脚本 3 天才能完成。
您可以在下面看到我的EXPLAIN 输出。
id 索引与 PRIMARY 键类似,但列颠倒:id, update_id_to
你有什么想法可以让它更快吗?
【问题讨论】:
标签: mysql query-optimization greatest-n-per-group