在MySQL中加速很慢的内部连接查询
问题描述:
我试图在字段'source_key'上使用索引运行以下SQL查询。在MySQL中,它长时间处于“发送数据”状态。在MySQL中加速很慢的内部连接查询
UPDATE clients_test c
INNER JOIN
(
select dob, last_name, soundex(first_name) as soundexfirstname, max(source_key) as keep
from clients_test
group by dob, last_name, soundex(first_name)
having count(*) = 2
) k
ON c.dob=k.dob AND c.last_name=k.last_name AND soundex(c.first_name)=k.soundexfirstname
SET duplicate_key = NULLIF(k.keep, c.source_key),
duplicate = (k.keep = c.source_key);
它应该识别并删除数据库表clients_test中的重复记录。有什么方法可以使这项工作更快或者将查询更改为更高效?
答
我首先想到的是将soundex()值存储在数据库中,而不是对每一行重新计算它。
并在新的soundex()列上添加CHECK()约束,以确保它与“first_name”列保持同步。
此外,当您尝试调谐查询时,EXPLAIN是您的朋友。
将soundex移动到预先计算的字段中,确定地加快了此查询的速度。我的低功率云实例仍然花费了很长时间,但至少在一天之内没有挂上! – Darren 2011-01-24 23:04:58