Notice
Recent Posts
Recent Comments
뽁
MySQL.SQL튜닝.WHERE절의 INFULL 사용 시 성능저하 튜닝 본문
튜닝 대상 쿼리문
SELECT ti.*
FROM ti
WHERE ti.agr_dy = IFNULL('20191125',DATE_FORMAT(SYSDATE(),'%Y%m%d'))
;
ti 테이블의 인덱스는
IX_TI_01(agr_dy) 있음.
그런데
explain을 보면
Using Temporary 가 보이고. rows 도 9백만건으로 테이블 전체 건수이다.
filtered 가 보이므로
ti.agr_dy = IFNULL('20191125',DATE_FORMAT(SYSDATE(),'%Y%m%d')) 조건이 인덱스를 타지 않고
fileter 로 처리되었다.
튜닝1
- 조건절의 IFNULL() 를 IF~THEN 구문으로 대체
- ti.agr_dy = l_arg_dy 조건을 WHERE절 맨 처음으로 위치.
(순서를 변경하니 using temporary 가 없어지면서 빨라짐)
IF l_arg_dy IS NULL THEN
SET l_arg_dy = DATE_FORMAT(SYSDATE(),'%Y%m%d')) ;
END IF;
SELECT ti.*
FROM ti
WHERE ti.agr_dy = l_arg_dy
;
튜닝2. 조건을 subquery 로 해도 됨.
SELECT ti.*
FROM ti
WHERE ti.agr_dy = (SELECT IFNULL('20191125',DATE_FORMAT(SYSDATE(),'%Y%m%d')) )
;
'IT Cafe+ > MySQL' 카테고리의 다른 글
MySQL. 쿼리 수행 시 Illegal mix of collations 오류 (0) | 2019.12.10 |
---|---|
MySQL.대량 데이터 작업 시 TMP table 파라메터 공유 (0) | 2019.10.31 |
MySQL.OracleToMySQL 데이터 이관 시 이모티콘 텍스트 깨지는 오류 (0) | 2019.10.31 |
MySQL.인덱스 정의서 추출 쿼리문 (0) | 2019.10.01 |
MySQL.테이블정의서 추출 쿼리문 (0) | 2019.09.23 |
Comments