으나님의 잡다한 개발상식
(SQL) 형변환과 인덱스 본문
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');
'SQL' 카테고리의 다른 글
(SQL) WITH 구문 (0) | 2020.05.25 |
---|---|
(SQL) ROWID (0) | 2020.05.25 |
(SQL) COUNT 함수 (0) | 2020.05.25 |
(SQL) NULL관련 함수 (0) | 2020.05.25 |
(SQL) ORDER BY (0) | 2020.05.25 |