加快MySQL中一个非常慢的内连接查询

时间:2011-01-24 12:27:38

标签: mysql

我正在尝试使用字段'source_key'上的索引运行以下SQL查询。在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中的重复记录。有没有办法让这项工作更快或更改查询更有效?

1 个答案:

答案 0 :(得分:2)

我的第一个想法是将soundex()值存储在数据库中,而不是为每一行重新计算它。

在新的soundex()列上添加CHECK()约束,以确保它与'first_name'列保持同步。

此外,当您尝试调整查询时,EXPLAIN是您的朋友。