데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
안녕하세요~
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