목록튜닝 (2)
송민준의 개발노트
데이터를 다루다가 어느 순간부터 특정 테이블 쿼리가 느려지기 시작했다. 5개 정도 테이블을 조인 걸어서 조회하는 것이였는데... 실행계획이 이상하게 잡혔나싶어서 보니 정상적이다... 인덱스도 바뀐게 없는데...!!? 이리저리 힌트 바꿔가면서 삽질해봤지만 10초 정도 시간 줄이는게 끝... 물론 쿼리도 개선해야 할 부분이 있었다. 필요없는 칼럼들이 포함되어 있고 조건절에 'exists'가 아닌 'in'으로만 이루어져 있고... 하지만 더 좋은 방법이 있었다. Analyze를 사용하는 것이었다. Analyze란 무엇일까? - 인덱스, 테이블, 클러스터의 통계정보를 생성한다. 생성된 정보들은 비용기준의 옵티마이저가 가장 효율적인 실행계획을 수립하기 위해 최소비용을 계산할 때 사용된다. 구조를 확인하는 것은 물..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bsBgNm/btqGHNzNfUo/egCczeDNSXf3yIfSSplKM0/img.png)
옵티마이저란? - 가장 빠르고 효율적인 SQL 실행 계획을 수립하고 SQL을 실행하는 DBMS의 핵심적인 소프트웨어다.. - 실행 계획은 SQL 성능에 핵심적인 역할을 하며 동일한 결과라도 계획에 따라 성능이 다르다. 옵티마이저 종류 1. 규칙 기반 옵티마이저 미리 정해 놓은 규칙(액세스 경로별 우선순위)에 따라 엑세스 경로를 평가하고 실행계획을 선택한다. 2. 비용 기반 옵티마이저 예상되는 비용(쿼리 수행에 필요한 시간)을 기반으로 최적화를 수행한다. 미리 구한 테이블과 인덱스에 대한 통계정보를 기초로 각 오퍼레이션 단계별 예상 비용을 산정하고, 총비용이 가장 낮은 계획을 선택한다.(부적절한 통계정보의 경우 성능 정하) 옵티마이저 특징 - Data Dictionary에 있는 오브젝트 통계, 시스템 통계..