2013-04-19 2 views
0

다음 SQL은 준비 시간이 30 초 이상입니다. SQL이 잘못 되었습니까? 아니면 데이터베이스에 백만 개가 넘는 결과가 있습니까? 이 SQL을 오랫동안 준비하지 못하도록 최적화 할 수 있습니까?너무 오래 준비중인 MySQL 쿼리

UPDATE url_source_wp SET hash="ASDF2" 
WHERE (url_source_wp.id NOT IN (
    SELECT url_done_wp.url_source_wp FROM url_done_wp WHERE url_done_wp.url_group = 4) 
) 
AND (hash IS NULL) LIMIT 50 
+0

준비 또는 실행 시간? –

+0

url_group 열에 색인이 있습니까? – rejj

+0

상태 : 준비 중 실행 시간은 몇 밀리 초 이상입니다. 준비는 실행 시간에서 98 %입니다. – user2296949

답변

0

그것은 하위 선택의 사용을 피할 것 :

이 참조.

UPDATE 
    url_source_wp AS s 
    INNER JOIN url_done_wp AS d 
    ON s.id = d.url_source_wp 
SET 
    s.hash = 'ASDF2' 
WHERE 
    s.hash IS NULL 
    AND d.url_group = 4 

당신은 s.id, d.url_source_wp, s.hashd.url_group에 당신이 인덱스를 확인해야합니다. 또한 LIMIT을 다중 테이블 구문과 함께 사용할 수 없으므로이 정보가 중요하면이 제안 사항이 도움이되지 않을 수 있습니다.

+0

[Err] 1221 - UPDATE 및 LIMIT의 잘못된 사용 – user2296949

+0

@ user2296949 다중 테이블에서 LIMIT을 사용할 수 없습니다. 내 대답을 조정하겠습니다. –

관련 문제