mysql explain 2개 비교좀 해주시면 감사하겠습니다 0 0 494

by 토마톰 [MySQL] [2021.02.28 10:35:56]


 

아래 순서대로 select_type, type, rows, filtered, extra 항목입니다

SIMPLE     range         126631 100.00 Using where; Using index
SIMPLE     index         253262 100.00 Using index

 

위는 삭제하고자 하는 해당 테이블의 pk로만 join을 걸었을때 그리고 아래는 추가로 pk를 또 between 을 걸어둔 상태 입니다.

tmp_delete_seq는 delete하는 A테이블의 특정 pk 범위의 삭제하고자 할 seq값입니다
그리고 @start_seq AND @end_seq는 삭제 해야할 tmp_delete_seq를 뽑을때에 줬던 pk range입니다

아래 쿼리와 위 explain결과를 봤을때 어떤 쿼리로 삭제하는것이 더 나은 방법일까요 속도적으로

 

DELTE FROM A WHERE seq IN (
	SELECT seq FROM tmp_delete_seq
);

DELTE FROM A WHERE seq IN (
	SELECT seq FROM tmp_delete_seq
)
WHERE seq @start_seq AND @end_seq;

 

마지막으로 위 delete문을 select문으로 바꾸어 실행해보면 실제 데이터를 꺼내오는 시간은 수초 단위로 문제가 없는데 delete를 하게되면 실제 10분이 넘게 걸린다거나 오래 걸리는데 이유가 뭔지 모르겠습니다. 혹시 optimize table을 하게되면 개선이 될 수 있는 요소가 있는지도 궁금하네요. delete insert가 빈번히 이루어져 실제 row수는 3억건이지만 pk (ai) 값은 10억까지 늘어난 테이블입니다. optimize를 한적은 없고 innodb엔진인 상태이구요

 

감사합니다

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입