2011-01-24 4 views
0

'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에서 중복 레코드를 식별하고 제거해야합니다. 이 작업을 더 빨리 수행하거나 쿼리를보다 효율적으로 변경하는 방법이 있습니까?

답변

2

내 첫 번째 생각은 모든 행에 대해 다시 계산하지 않고 soundex() 값을 데이터베이스에 저장하는 것입니다.

새 soundex() 열에 CHECK() 제약 조건을 추가하여 'first_name'열과 동기화 상태를 유지하십시오.

또한 쿼리를 조정할 때 EXPLAIN은 친구입니다.

+0

미리 계산 된 입력란으로 soundex를 이동하면이 쿼리가 확실히 진행됩니다. 저전력 클라우드 인스턴스에서 여전히 오랜 시간이 걸렸지 만 적어도 하루 이상은 걸리지 않았습니다! – Darren