안녕하세요~
SQLER에서 여러모로 많은 도움을 받고 있어서 먼저 이글을 읽어주신 분들에게 감사의 말씀을 드립니다.
제 Site에서 MSSQL, ORACLE을 주로 다루고 있는데 데이터가 하루에 약 2만건 정도 쌓이고 있는 데이터 베이스가 있습니다.
데이터 조회시 데이터량이 많다보니 점점 느려지는 이슈사항이 있어 데이터를 삭제 하려고 아래와 같이 SQL(ORACLE기준)을 짜보았는데
STG에서 테스트해본 결과 삭제 시간이 너무 오래 걸려 라이브에 적용을 못할 것 같네요..
제가 전문적으로 공부를 한게 아니라서 최적화된 SQL인지는 잘 모르겠네요..~
== 아 래 ==
delete from TABLEA
where NUNMBER_A
in
(select NUMBER_B from TABLEB
Where C_DATE between '2010-01-01 00:00:00' and '2016-12-31 23:59:59'
and UPPER(NAME_B) like 'UNKNOWN%' and BB is null)
and M_DATE between '2010-01-01 00:00:00' and '2016-12-31 23:59:59'
and LENGTH(C_NO) > 13 and C_S is null
Comment 1
-
루디먼트
2018.06.21 09:58
인덱스가 어떻게 되어있는지 모르겠으나, 아래 쿼리에서 조건식 변경이 필요할 수도 있겠습니다.
쿼리는 in 보다 join 으로 하는게 더 낫습니다.
마지막으로 데이터 삭제는 3천건씩 1초 delay를 주고 무한루프로 삭제하시길 권장합니다.
아래 2가지 조건은 인덱스를 사용하지 못 하게 합니다.
-- upper 제거 가능?
-- c_no 컬럼이 숫자형이면, and c_no > 9999999999999