반응형
두 개의 개별 쿼리가 순간적으로 발생합니다.하위 쿼리로 쿼리가 매우 느립니다. 왜죠? mysql / mariadb
DELETE FROM search WHERE sequence_id IN (34546);
영향을 받는 행: 0 시간: 0,001s
SELECT sequence_id FROM sequences WHERE sequence_status = 1;
확인 시간: 0,001s
DELETE FROM search WHERE sequence_id IN (SELECT sequence_id FROM sequences WHERE sequence_status = 1);
해당 행: 0 시간: 2,868초
내가 뭘 잘못하고 있는 거지?
EXPLAIN DELETE FROM search WHERE sequence_id IN (SELECT sequence_id FROM sequences WHERE sequence_status = 1);
join을 사용해 보십시오.IN
.
DELETE search
FROM search
INNER JOIN sequences
ON sequences.sequence_id = search.sequence_id
WHERE sequences.sequence_status = 1;
지원하려면 인덱스를 생성합니다.search (sequence_id)
그리고.sequences (sequence_id, sequence_status)
.
CREATE INDEX search_sequence_id
ON search
(sequence_id);
CREATE INDEX sequences_sequence_id_sequence_status
ON sequences
(sequence_id,
sequence_status);
IN ( SELECT ... )
는 특히 이전 버전의 MySQL/MariaDB에서 최적화되지 않은 것으로 악명이 높습니다.피하세요!- 복잡한
DELETE
/UPDATE
예전에는 레임 파서/옵티마이저가 있었습니다.이게 당신이 때린 것 같은데요.최신 버전은 코드를 통합하여 삭제/업데이트 최적화를 향상시켰습니다. - 1ms의 시간은 종종 쿼리 캐시가 인수했음을 의미합니다. (따라서, 나는 당신의 첫 두 타이밍을 신뢰하지 않습니다.)
- 얼마나 큰가요?
sequences
? 가지고 계십니까?INDEX(sequence_status, sequence_id)
? - 멀티 테이블 제공
DELETE
구문 시도, 다르게 최적화될 수 있습니다.
언급URL : https://stackoverflow.com/questions/51225721/two-separate-queries-instantaneous-query-with-a-subquery-very-slow-why-mysql
반응형
'programing' 카테고리의 다른 글
jasmine.js는 ()가 비동기 콜백 내부에서 작동하지 않을 것으로 예상합니다. (0) | 2023.10.09 |
---|---|
IPv4 클라이언트/서버 앱에서 IPv6 지원 추가 - sin6_flowinfo 및 sin6_scope_id 필드? (0) | 2023.10.09 |
MySQL 부울 "tinyint(1)"은 127까지 값을 유지합니다. (0) | 2023.10.09 |
NGINX가 임의로 작동을 중지하므로 수동 재시작이 필요합니다. (0) | 2023.10.09 |
ASP.NET - Ajax.파라미터를 사용하여 양식 OnSuccess 콜백 시작 (0) | 2023.10.04 |