2013-01-15 6 views
0

다른 테이블에 외래 키가있는 2 개의 mysql 테이블이있다. mysqldump가 where 문을 사용하여 특정 하위 집합을 선택적으로 덤프 할 때 두 번째 mysqldump는 준비 상태가되고 영원히 중단됩니다. 어떻게 해결할 수 있습니까?mysqldump가 응답하지 않는다

 
mysqldump -u$username -p$password --quick --lock-all-tables --where="table1_id<1000" $db table1 > $dump_dir/table1.sql                         

mysqldump -u$username -p$password --quick --lock-all-tables --where="table2_id in (select table2_id from table1 where table1_id<1000)" $db table2 >$dump_dir/table2.sql 

답변

0

다음은 시도 할 수있는 몇 가지 예입니다.

를 추가해보십시오 인덱스 : 또한

... ON table1 (table1_id, table2_id) 

, 하위 쿼리에 DISTINCT 키워드를 추가해보십시오 : MySQL을 사용하는 쿼리의 성능보다

table2_id in (select DISTINCT table2_id from table1 where table1_id<1000) 

기타, 난 몰라 lock-all-tables 옵션 이외의 "정지"가 발생해야하는 모든 것을 확인하십시오. 나는 당신이 그것없이 테스트했고, 같은 행동을 관찰했다고 가정합니다.


Q : 당신은이 중단 원인을 의심 할?

필자는 그것이 크랭크 인 SELECT 문이라고 생각합니다. 테이블 2의 모든 행에 대해 실행 계획이 table1에서 중첩 루프 조회를 수행하고있을 가능성이 높습니다. IN (subquery) 술어가 EXISTS (correlated subquery)에 최적화되어 있다고 생각합니다.

Q : 왜 색인 추가가 도움이됩니까?

색인이 전혀 도움이되지 않을 수 있습니다. 그러나 table1의 적절한 색인은 부속 조회에서 결과를 검색하는 데 필요한 시간을 줄입니다. (하위 쿼리의 결과는 "캐시 됨"이므로 해당 하위 쿼리가 처음 실행될 때만 비용 절감이 이루어지며 평가되는 table2의 각 행에 대해 절약되지는 않습니다.)

+0

나는 별개로 시도했습니다. 도움이되지 않았다. 왜 인덱스를 추가하면 도움이 될까요? 교수형의 원인이 무엇이라고 생각하니? – user121196

+0

IN (subquery)은 mysql이 하위 쿼리를 계속해서 다시 실행하기 때문에 교수형에 처해있다. – user121196

관련 문제