관리 메뉴

wedul

바인드 변수를 이용한 오라클 SQL 튜닝 소개 본문

데이터베이스/친절한 SQL 튜닝

바인드 변수를 이용한 오라클 SQL 튜닝 소개

wedul 2018. 6. 19. 10:49
반응형

저번 시간에 내부 프로시저를 재사용해야 쿼리 수행시 비용이 감소한다고 공부하였다. 그렇게 재사용성을 높이기 위해서 어떻게 해야하는지 알아보자.


바인드 변수 사용

사용자 정의  함수/프로시저, 트리거등은 별도의 이름이 있어 생성하여 계속해서 재사용할 수있다. 하지만 SQL은 이름이 없어서 내부 프로시저에 저장하여 사용한다. 그렇듯 SQL은 별도의 이름이 아닌 그 자체가 이름처럼 고유의 값으로 사용된다.


그럼 공백이나 대,소문자가 달라도 다른 객체인가? 아래 쿼리를보자.


1
2
3
4
5
6
7
8
select * from t where empno = 7695;
select * from t where empno = 7695 ; 
select * from T where empno = 7695;
select * from t WHERE empno = 7695;
select * from scott.emp where empno = 7695;
select /* comment */ * from emp where empno = 7695;
select /*+ first_rows */ * from emp where empno = 7695;
 
cs


위의 쿼리들은 서로 다른 쿼리로서 내부 프로시저에서 공유해서 사용하지 않고 하드파싱이 일어난다. 그렇기에 프로그램에서 과도하게 변경되는 쿼리를 자주사용할 경우 과도한 I/O가 발생하여 리소스를 엄청 소모하게 된다.

이런문제를 해결하기 위해서 쿼리에 바인드 변수를 사용하면 된다.

다음과 같이 쿼리를 변경한다면 한번의 하드파싱이 발생하고 내부적으로 프로시저를 공유하게 되기 때문에 성능이 엄청 빨라진다.


1
select /*+ first_rows */ * from emp where empno = :1;
cs


반응형