2017-11-13 1 views
0

내가 다음 쿼리의 이상한 행동을 발견 아주 오래 걸립니다. 나는이 개 쿼리에 명령을 분할 할 때MySQL을 업데이트

:

SELECT source_id FROM llx_mailing_cibles where tag = "68d74c3bc618ebed67919ed5646d0ffb"; 

결과는 밀리 초 단위로 표시됩니다 10,842

UPDATE llx_socpeople SET no_email=1 WHERE rowid = 10842; 

결과입니다.

표 11x_socpeople에는 약 7.000 개의 레코드가 있고, llx_mailing_cibles에는 약 10.000 개의 레코드가 있습니다.

MySQL 버젼은 다음과 같습니다 5.7.20-0ubuntu0.16.04.1 이미/최적화 아무런 영향을 미치지와 두 테이블을 복구하려고

.

아이디어가 있으십니까?

+0

첫 번째 방법은 주 쿼리의 모든 행에 대해 하위 쿼리를 무의미하게 실행하기 때문에? 그래서, [MySQL 하위 쿼리의 대용량은 크게 느려지지만 독립적으로 작동합니다] (https://dba.stackexchange.com/questions/14565/mysql-subquery-slows-down-drastically-but-theywork-fine- 독립적으로) –

+0

'WHERE rowid IN '대신 WHERE rowid ='시도 – Bhargav

+0

빠른 응답 주셔서 감사합니다 - 내 문제 해결 – Guenter

답변

0

현재, 기본 쿼리의 각 행에 대해 하위 쿼리가 실행되므로 더 긴 실행 시간을 기대할 수 있습니다. 내가 제안하는 업데이트를 수행하기위한 내부 조인에 의존하는 것입니다 : 당신은 확실히 훨씬 더 나은 성능을 얻을 것이다

UPDATE llx_socpeople AS t1 
INNER JOIN llx_mailing_cibles AS t2 
ON t1.rowid = t2.source_id 
SET t1.no_email=1 
WHERE t2.tag = "68d74c3bc618ebed67919ed5646d0ffb"; 

이 방법.

EXPLAIN MySql 문을 사용하여 느린 쿼리 문제를 해결할 수 있습니다. 공식 문서에서 it's dedicated page에 대한 자세한 내용을 찾아보십시오. 누락 된 색인을 발견하는 데 도움이 될 수 있습니다.

+0

감사합니다. 내 문제를 해결했습니다. 하위 쿼리에 결과가 1 개 이상있는 경우에 작동합니다. – Guenter