SQL 튜닝 결과보고

- 오라클 기준

- 8가지 사례소개

 

*블록IO

- 블록IO 를 줄이면 수행시간 단축 가능

- DBMS에서 IO는 블록단위로 이루어짐

- 레코드를 읽을때 레코드가 속한 블록 전체를 읽게됨

- 따라서 블록IO개수는 쿼리 실행할때 읽게되는 블록의 개수

- 보통 한번 가져올때 블록 128개 가져옴

- 인덱싱된 로우 가져올때는 싱글블록IO(블록1개만가져올수잇음)

- MSSQL 에서는 페이지라는 용어 사용

 

*스칼라 서브쿼리

- 스칼라 서브쿼리 쓰면 버퍼캐시에 캐싱이 되기때문에 부하감소

- 예를 들어 1을 입력한후 다음번에도 1을 입력하면 미리 캐시된 값이 나가서 시간 단축

- 리컬시브 콜을 감소

- 근데 입력값이 유니크한것보다 변별력없을때 성능이 더 좋아짐

- 사용시 밑져야 본전이므로 스칼라서브쿼리 사용을 표준으로 잡는것도 나쁘지않음

 

*쿼리변환

- 결합된 쿼리 개선 > 결합을 풀거나 다른방식으로 진행

- 보통은 옵티마이저가 알아서 잘해주지만... 잘 안될때도잇음

 

*인덱스

- 인덱스를 쓰면 빠르다고 생각하는데 인덱스를 타서 테이블로 가는것도 부하가 생기므로 건수가 적으면 안쓰는게 나음

- 예를들어 3만건이면 풀스캔이 나음 인덱스쓰면 3만번도는거

 

*파티션 프루닝

- 읽지않아도되는 파티션을 제외시키는 법

 

*NL조인?

- Nested Loops

 

*view push predicate

- 힌트를 줘서 WITH 문 부터 실행하는게 아니라 인라인을 먼저 실행해서 WITH문에 더 좋은조건을 주는것

- WITH절에 무조건 이걸 쓰는게 좋은건 아니고 해당하는 케이스에만 사용

 

*SQL 튜닝의 시작 책

 

*View Merging

- 큰쿼리안에 작은쿼리 감싸고 있는 경우 작은쿼리를 큰쿼리 레벨로 올리는 것

- 뷰머징이 실패할 경우가 많음 >내부로직이 복잡해서 > 노머징 힌트를 주고 반대로 작은쿼리로 데이터를 던져주는방식으로 view push predicate 유도

+ Recent posts