우리 회사 데이터베이스를 티베로로 변경하기
LIKE 검색 시 부적절한 바인드 변수 0 0 81,065

by 티베로 티베로전환 티베로성능개선 [2018.09.30]


일별로 수집하는 통계 테이블에서 특정 월에 해당하는 데이터를 추출하기 위해 소 속 회사는 다음과 같은 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이 넘어오지 않도록 조치하여 티베로 전환 이전에 선 반영하였다.

  • [참고 4-22] LIKE 검색 시 바인드 변수가 null인 경우 성능
  • * SQL: SELECT SUM(1) FROM 일별통계테이블 WHERE 기준일자 LIKE SUBSTR(:기준일,1,6) || '%' ;

  • - 해당 강좌는 도서 " [우리 회사 데이터베이스를 티베로로 변경하기]"의 내용을 옮겼습니다.
  • - 해당 도서는 기간계 DBMS(DATABASE MANAGEMENT SYSTEM)를 티베로로 전환하는 실제 프로젝트를 수행한 실무자가 DBMS 전환 과정과 실제 적용 사례, 문제 해결 과정 등을 자세하게 설명하고 있습니다.

- 강좌 URL : http://www.gurubee.net/lecture/4136

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

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