[英]Speeding up a very slow inner join query in 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);
它應該標識並刪除數據庫表client_test中的重復記錄。 是否有任何方法可以使此工作更快或更有效地更改查詢?
我的第一個想法是將soundex()值存儲在數據庫中,而不是為每一行重新計算它。
並在新的soundex()列上添加CHECK()約束,以確保它與'first_name'列保持同步。
另外,當您嘗試調整查詢時,EXPLAIN是您的朋友。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.