일별로 수집하는 통계 테이블에서 특정 월에 해당하는 데이터를 추출하기 위해 소 속 회사는 다음과 같은 LIKE 검색을 종종 사용한다.
SELECT * FROM 일별통계테이블 WHERE 기준일자 LIKE SUBSTR(:기준일,1,6) || '%' ; -- 바인드변수(기준일)가 "20161026"(년/월/일) 이라면 -- 2016년 10월의 모든 데이터 추출 목적
만약 EQUAL(=) 검색을 위해 WHERE 조건을 SUBSTR(기준일자,1,6) = SUBSTR(:기준일,1,6) 과 같은 형태로 변경하면 인덱스 컬럼(기준일자)이 가공되어 인덱스를 사용하지 못하거나 부분범위 처리가 불가능할 수 있어 LIKE 검색이 올바 른 SQL의 형태임은 분명하다.
그러나 이때 바인드 변수에 아무것도 입력되지 않는 다면(NULL) [WHERE 기준일자 LIKE ‘%’]와 같은 조건문이 되어 해당 테이블의 모든 ROW를 추출하는 조건이 되므로 주의가 필요하다.
본 이슈는 외산DB에서도 동일하게 문제가 되므로 화면단에서 NULL이 넘어오지 않도록 조치하여 티베로 전환 이전에 선 반영하였다.
- 강좌 URL : http://www.gurubee.net/lecture/4136
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.