프리 정보 컨텐츠

친절한 SQL 튜닝 - 7장 SQL 옵티마이저 본문

SQLP/친절한 SQL 튜닝

친절한 SQL 튜닝 - 7장 SQL 옵티마이저

쏜스 2025. 2. 18. 19:21
반응형

7장 SQL 옵티마이저

7.1.1 선택도와 카디널리티

선택도

  • 선택도란 전체 레코드 중에서 조건절에 의해 선택되는 레코드 비율이며 가장 단순한 '=' 조건으로 검색할 때의 선택도를 보면 컬럼 값 종류 개수(NDV) 를 이용해 아래와 같이 구한다.

선택도 = 1 / NDV

 

카디널리티

  • 카디널리티란, 전체 레코드 중에서 조건절에 의해 선택되는 레코드 개수이며 아래와 같이 구한다.

카디널리티 = 총 로우수 * 선택도 = 총 로우 수 / NDV

-- 예를 들어 상품분류 컬럼에 가전, 의류, 식음료, 생활용품 네 개의 값이 존재
-- 조건절에 대한 선택도는 25%이며, 전체 레코드가 10만건이면 카디널리티는 2만 5천이다.
  • 옵티마이저는 이렇게 카디널리티를 구하고, 그만큼의 데이터를 액세스하는데 드는 비용을 계산해서 테이블 액세스 방식, 조인 순서, 조인 방식 등을 결정한다.
  • 선택도를 잘못 계산하면, 카디널리티와 비용도 잘못 계산하고, 결과적으로 비효율적인 액세스 방식과 조인 방식을 선택하게 된다.

순위를 결정하는 RBO 규칙

 

-- 고객유형코드 조건을 만족하는 고객이 전체에서 90%라면, RBO는 결코 좋은 선택을 했다고 보기 어렵다. (인덱스 손익분기점)
SELECT *
FROM 고객
WHERE 고객유형코드 = 'CC0123'

-- BETWEEN(10위), 부등호 조건(11위)
-- 연령과 연봉 컬럼에 인덱스가 존재한다면 아래 SQL은 무조건 연봉 컬럼 인덱스를 사용함.
SELECT *
FROM 사원
WHERE 연령 >= 60
AND 연봉 BETWEEN 3000 AND 6000;
  • 각종 파라미터를 적절한 값으로 설정하고, 통계정보를 잘 수입해 주고 나서 전략적인 인덱스 구성이 필수적으로 뒷받침되어야 한다.
반응형
Comments