쿼리를 짜 보았는데, 성능이 안 나와서 조언을 구합니다 (mysql) 0 4 599

by 아니8083 [MySQL] 쿼리 성능 튜닝 [2019.09.06 10:02:36]


아래와 같이 쿼리를 작성 하였는데,

데이터가 9000만건 정도 되니, 성능이 영 나오질 않습니다.

아래 관련하여 혹 쿼리를 어떻게 수정하면 좀 개선이 될 지 의견을 구합니다..!

 

SELECT *

   FROM TEMP_JG_01

  WHERE 1=1

    AND (    ETL_YMD IS NULL

          OR ADMI_CD IS NULL

          OR ID      IS NULL

          OR X_COORD IS NULL

          OR Y_COORD IS NULL

          OR OUT1    IS NOT NULL

          OR NOT((ETL_YMD BETWEEN 20170301 AND 20170831) OR (ETL_YMD BETWEEN 20180101 AND 20180630))

          OR NOT(ID      BETWEEN 90000000 AND 110000000)

          OR NOT(X_COORD BETWEEN 400000   AND 600000)

          OR NOT(Y_COORD BETWEEN 300000   AND 400000)

        )

;

by jkson [2019.09.06 10:52:37]

or 다수에 is null, is not null, not.. 9000만건..

mysql이 null도 index에 추가한다고 하지만

그냥 느릴 수밖에 없는 쿼리 같은데 온라인 쿼리인가요?

결과로 나올 예상 row 수가 어느 정도 되는지..

일정량 이상의 많은 row수가 예상되는

통계성 쿼리라면 그냥 기다리시는 게 나아보입니다.


by 마농 [2019.09.06 10:59:02]

왜 저런 이상한 조건을 주는지 이해가 안가네요.


by 아니8083 [2019.09.06 11:21:07]

대용량 csv 업로드시, 컬럼이 밀려서 들어가는 바람에 밀려들어간 컬럼을 골라내느라

그 컬럼이 가진 범위 값 이외의 것들을 걸러 내려고 하니, 이런 쿼리를 작성하게 되었습니다.

실제로 단위 테스트 시에는 저 범위 안에서 이상치가 모두 걸러져 나와서 전체 테이블에 걸고 이상치를 발라내는 중 입니다.


by 우리집아찌 [2019.09.06 11:11:35]

9000만건이면 조금씩 나누어서 돌려보면 어떨까요?

날짜같은것이 인덱스가 있다면 월단위로 돌려보는것도 괜찮을것 같습니다.

파티셔닝 되어있으면 파티션 단위도 괜찮네요.

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