【发布时间】:2011-09-07 02:47:21
【问题描述】:
有一个更新查询需要超过 20 分钟的问题(我在那之后杀死了它)。
场景:
表一有大约 30 万条记录。
表二包含相同的记录集(已复制),但有一个额外的字段,该字段需要包含与多个字段匹配的记录的 id,并且具有另一个字段的最高值(分数)。澄清一下,最终结果应该是包含 30 万条记录的表 2,每条记录的 id 都是具有相同基本属性集的另一条记录,以及具有这些属性的记录集中的最高分。
当我只将 2K 记录而不是完整的 300k 记录复制到表 2 中时,以下内容在 ~5 秒内完成。
UPDATE vtable2 v1 SET v1.buddy = (
SELECT v2.id FROM vtable1 v2
WHERE
v2.group_id = v1.group_id AND
// 6 more basic comparisons
ORDER BY score DESC LIMIT 1
)
我需要为完整的 300K 记录寻找伙伴。加入和排序所涉及的所有字段都有索引。
非常感谢您的帮助。
【问题讨论】:
-
添加当前需要 20 分钟的查询怎么样?这里没有太多事情要做。
-
我唯一的建议是进行比较,或者缺少它们的索引,或者对字段进行错误计算,例如,而不是将 -7 作为常数添加到当前日期,添加 7到字段中的每个日期,诸如此类的事情
-
@tloach:这是需要 20 分钟的查询。
标签: mysql performance greatest-n-per-group sql-update