簡體   English   中英

在MySQL中加快非常慢的內部聯接查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM