2017-10-27 9 views
-1

MySQL 서버에서 두 테이블 내부 조인 쿼리를 실행 중이며 매우 느리며 완료하는 데 3 시간이 걸립니다.인덱싱 된 테이블에서 내부 조인 쿼리가 매우 느리게 실행되고 있습니까?

UPDATE table_A ta 
    JOIN table_B tb 
    ON ta.field1= tb.field1 
    AND ta.field2 = tb.field2 
    SET ta.field2 = tb.field2, 
    ta.field3 = tb.field3 
WHERE tb.field5 = 'ABC' 

table_A는 65 개 행이 table_B 100,000 행

모두 타

있습니다. field1, ta. field2, tb. field1, tb. field2, tb field5은 모두 EXPLAIN 결과에 색인이 지정되어 표시됩니다.

어떻게하면 더 빠르게 실행할 수 있습니까? 이 쿼리

+0

인덱스 작성 SQL을 추가하십시오. 아마 인덱스가 잘못되었습니다. 분명히 tb.field5에 인덱스가 있습니다. – Andrew

+0

인덱스가있는 필드를 업데이트하고 있습니다. 너는 왜 그것을 필요로 하는가? –

+0

나는이 질문을 downvote하지 않았지만 앞으로는 쿼리 최적화 도움말을 요청할 때 데이터 형식, 인덱스 및 제약 조건을 볼 수 있도록 쿼리의 각 테이블에 대해 'SHOW CREATE TABLE'출력을 포함 시키십시오. . 또한'EXPLAIN'의 출력을 포함하십시오. –

답변

1

:

UPDATE `table_A` ta INNER JOIN 
     table_B tb 
     ON ta.`field1`= tb.`field1` AND ta.`field2` = tb.`field2` 
SET ta.`field2` = tb.`field2`, 
    ta.`field3` = tb.`field3` 
WHERE tb.`field5` = 'ABC'; 

field2를 업데이트 할 필요 새 값합니다 (join 조건에 따라) 이전 값과 동일 함을 주어이 없습니다. 이러한 인덱스 방식의

하나는 잘 작동한다 : table_B(field1, field2, field5)

  • table_B(field5, field1, field2)

    • , 잘 작동 데이터의 특성에 따라 달라 table_A(field1, field2)

    . 그러나 각 필드에서 별도의 인덱스가 아닌 복합 인덱스를 사용하는 것이 매우 중요합니다.

  • +0

    확인. 밖으로 시도하고 볼 것입니다 .. 고마워! –

    +0

    왜 필드 2를 업데이트하고 있습니까? !?! – Strawberry

    +0

    @Strawberry. . . 정말 좋은 질문입니다. OP에게 물어보십시오. –