在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是您的朋友。

+0

将soundex移动到预先计算的字段中,确定地加快了此查询的速度。我的低功率云实例仍然花费了很长时间,但至少在一天之内没有挂上! – Darren 2011-01-24 23:04:58