Search

[필수:성능]자료형 불일치 바인드 변수

BAD

비권장 사례
① 특정일 조회
SELECT o.ord_no ,o.ord_dtm FROM startdbpg.tr_ord_big o WHERE o.ord_ymd = '20240110'::CHAR(8) ;
SQL
복사
실행계획 보기
•
::CHAR는 길이를 지정하지 않으면 CHAR(1)로 처리되므로, '20250201'은 '2'로, 'Air'는 'A'로 잘립니다. 검색값이 달라지는 정합성 문제가 발생하고, VARCHAR 컬럼이 bpchar로 변환되면서 일반 인덱스를 효율적으로 활용하지 못할 수 있습니다.

GOOD

개선 사례
① 특정일 조회
SELECT o.ord_no ,o.ord_dtm FROM startdbpg.tr_ord_big o WHERE o.ord_ymd = '20240110' -- ::TEXT or ::VARCHAR ;
SQL
복사
실행계획 보기
•
VARCHAR 컬럼은 원래 자료형에 맞는 문자열 값과 비교합니다. 예제처럼 문자열 리터럴을 그대로 사용하거나 ::VARCHAR, ::TEXT를 명시하면 검색값을 유지하면서 인덱스를 활용할 수 있습니다.
🔎

TIP

•
실행계획의 Filter: ((ord_ymd)::bpchar = '2'::character(1))를 확인해 보세요. 이 사례는 단순히 인덱스를 사용하지 않는 문제를 넘어, 비교값 자체가 달라진 사례입니다.
💡

KEY POINT

-- 테이블의 컬럼 자료형 확인하기 SELECT c.column_name ,c.data_type ,c.character_maximum_length FROM INFORMATION_SCHEMA.COLUMNS c WHERE c.table_schema = 'startdbpg' AND c.table_name = 'tr_ord_big' AND c.column_name = 'ord_ymd' ;
SQL
복사