아래 순서대로 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엔진인 상태이구요
감사합니다