SQL
(SQL) 형변환과 인덱스
스위트치즈
2020. 5. 25. 19:43
1. 형변환
1) 명시적 형변환 : 형변환 함수를 사용하는 경우
- TO_NUMBER(문자열)
- TO_CHAR(숫자 혹은 날짜, [FORMAT])
- TO_DATE(문자열, FORMAT)
2) 암시적 형변환 : DBMS가 자동으로 형변환 하는 경우
SELECT * FROM EMP WHERE EMPNO = '100';
EMPNO가 숫자형 데이터 타입이라고 가정하자. 여기서는 비교값을 '100'으로 따옴표로 묶었기 때문에 '100'은 문자형이다. 이 경우 EMPNO를 ORACLE이 자동으로 TO_CHAR(EMPNO)로 변환해서 데이터 타입을 일치시킨다.
3) 암시적 형변환과 인덱스
인덱스는 데이터를 빠르게 조회하기 위해 인덱스 키를 기준으로 정렬해 놓은 데이터이다. 그런데 기본적으로 인덱스는 변형이 발생하면 사용할 수 없다(예외도 있음). 따라서 인덱스가 있어도 인덱스 컬럼에 형변환이 발생하면 인덱스를 사용할 수 없다.
SELECT * FROM EMP WHERE EMPNO = '100';
만약 EMPNO가 숫자형 데이터 타입이고 기본키라면 이 경우 자동으로 암시적 형변환이 되므로 인덱스를 사용할 수 없게 된다. 이와 같은 문제는 아래와 같이 해결할 수 있다.
SELECT * FROM EMP WHERE EMPNO = TO_NUMBER('100');