| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 알고리즘
- boot
- 후기
- Spring Boot
- Spring
- 자바
- java8
- 이펙티브
- effective
- 자바스크립트
- RCP
- error
- elasticsearch
- jface
- javascript
- 인터페이스
- java
- 맛집
- 리뷰
- MySQL
- Web
- Git
- 스프링
- 백준
- JPA
- node
- kibana
- 엘라스틱서치
- 독후감
- nodejs
Archives
- Today
- Total
wedul
바인드 변수를 이용한 오라클 SQL 튜닝 소개 본문
반응형
저번 시간에 내부 프로시저를 재사용해야 쿼리 수행시 비용이 감소한다고 공부하였다. 그렇게 재사용성을 높이기 위해서 어떻게 해야하는지 알아보자.
바인드 변수 사용
사용자 정의 함수/프로시저, 트리거등은 별도의 이름이 있어 생성하여 계속해서 재사용할 수있다. 하지만 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 |
반응형
'데이터베이스 > 친절한 SQL 튜닝' 카테고리의 다른 글
| 시퀀셜 액세스와 랜덤 액세스 (0) | 2018.06.28 |
|---|---|
| 데이터 저장 구조 및 I/O 메커니즘 (0) | 2018.06.19 |
| 오라클 옵티마이저의 소프트파싱(soft parsing)와 하드파싱(hard parsing) (0) | 2018.06.18 |
| 옵티마이저에게 사용할 인덱스(index) 힌트주기 (0) | 2018.06.18 |
| SQL 최적화 과정과 옵티마이저 소개 및 역할안내 (0) | 2018.06.18 |
