TO_NUMBER (숫자형으로 변환)
만약, sal(월급) 컬럼이 to_char 인 문자형으로 되어있다면?
select ename, sal
from emp
where sal = 3000 ;
을 출력한다면 오라클의 암시적 형변환으로 인해 출력은 된다.
하지만 제대로된 오라클의 성능을 위해서는
select ename sal,
from emp
where to_number(sal) = 3000;
이렇게 sal 을 숫자형으로 바꾸어서 출력해 주어야한다
- 지금의 예시는 설명을 위한 예시일뿐 컬럼에 가공(tom_number으로 ) 을 하는 식은 좋지 않다.
암시적 형 변환
다음의 식은 SAl이 숫자형이다.
select ename, sal
from emp
where sal = '3000';
설명 : where 절에 3000은 숫자여서 원래는 '싱클 쿼테이션 마크'가 없어야하는데 붙어있다. (문자형취급된다)
하지만 오라클에서 알아서 암시적으로 형을 숫자로 변환해 주어서 오류없이 코딩이 출력 되었다 .
만약에 이런 문장이 많아져서 암시적 형 변환이 많아 진다면 코딩 속도가 느려진다.
→ 개선 후
select ename, sal
from emp
where sal = 3000;
예제
select ename, sal
from emp
where sal like '30%';
설명 :
될까? where 절에 sal 은 숫자형 이고 '30%'은 문자형이다..
근데 사실 코딩해보면 실행이 된다.
이유는 오라클에서 내부적으로 sal 을 숫자에서 —> 문자형으로 암시적형 변환을 해 주었기 때문에
또, like 는 왼쪽에 문자형 컬럼을 사용해 주어야한다 (sal은 숫자형 컬럼..)
만약 like 를 자주 사용하는 SQL 의 컬럼은 처음 테이블 생성할 때 부터 숫자형이 아니라 문자형으로 생성해 주어야한다.
원래 맞는 식은
where to_char(sal) like '30%' ;
→자체적으로 sal 을 to_char 를 사용하여 문자형으로 바꾸어 주어야 성능이 좋아진다.
암시적 형 변환이 많이 일어나게 되면 현업에서는 너무 느리게 실행이 된다 (빅데이터 이기 때문에)
오라클에서 어떻게 자체적으로 변환하여 실행 했는지 볼수있는 쿼리
→(SQL 의 실행계획을 확인하는 방법)
explain plan for
select ename, sal
from emp
where sal like '30%';
select *
from table(dbms_xplan.display);
→ 이 SQL 을 어떻게 실행했는지에 대한 계획이 나온다
튜닝 : 오라클 검색속도를 높이는 것
튜닝순서
(1) 오라클이 어떤 계획으로 실행을 했는지 계획을 확인한다.
(2) 마지막에 오라클이 암시적 형 변환을 시킨 문장을 본다.
(3) 암시적 형 변환이 이루어진 문장을 수정시켜준다.
응용 문제 : 직업이 세일즈맨, 애널리스트 인사원들 이름,월급, 직업 출력 ,월급을 출력할때 천단위 나오게 하고, 월급이 높은 사원부터 출력
select ename, to_char(sal, '999,999'), job
from emp
where job in ('SALESMAN','ANALYST')
order by sal desc;
'Oracle > SQL' 카테고리의 다른 글
SQL 단일행 함수 - 일반함수 ( Decode ) (0) | 2021.11.19 |
---|---|
SQL 단일행 함수 - 일반함수 (NULL 을 처리하는 NVL, NVL2) (0) | 2021.11.19 |
SQL 단일행 함수 -변환함수 (To_date) 날짜형으로 변환 (0) | 2021.11.19 |
SQL 단일행 함수 -변환함수 (To_char) 문자형으로 변환 (0) | 2021.11.19 |
SQL 단일행 함수 - 날짜함수 (0) | 2021.11.19 |