2009년 12월 16일 수요일

Selectivity, Density, Cardinality, Cost

출처 : OCMKOREA

 

Selectivity(선택도)
 (찾고자 하는 행)을 전체 행의 수로 나눈 결과이다.

 테이블 이름 : 회원

 번호 성명 지역
 --------------------
 1    김영태 마포
 2     백승엽 강남
 3     이창훈 강남
 4     설진욱 노원
 5    박우희 마포
 6     박철민 강남
 7     조상현 강남
 8     오우석 강남
 9    윤권     마포
 10    인은주 노원

 

 Case 1: 회원 번호 1번(김영태)의 분포도
  select 번호, 성명, 지역 from 회원
  where 번호 = 1;
  --> 1건 나옴

  선택도(번호) = 1 / 10 = 0.1

 

 Case 2: 강남 지역의 분포도(총 5명)
  select 번호, 성명, 지역 from 회원
  where 지역 = '강남';
  --> 5건 나옴

  선택도(지역) = 5 / 10 = 0.5

 

 정리
  값이 작을 수록 선택도가 좋다고 한다.
  위의 예제에서는 Case 1이 더 선택도가 좋다고 한다.
  즉, 번호 칼럼이 인덱스의 후보가 될 수 있다.

 

Density(조밀도)
 일반적으로 특정 칼럼을 대상으로 따지는 개념이다.
 예를 들어 위 예제의 지역 칼럼을 가지고 따져 보자.

 

 Case 1: 노원 사는 사람(총 2명)
  select 번호, 성명, 지역 from 회원
  where 지역 = '노원';
  --> 2건 나옴

 

 Case 2: 강남 사는 사람(총 5명)
  select 번호, 성명, 지역 from 회원
  where 지역 = '강남';
  --> 5건 나옴

 

 정리
  unique 인덱스는 저밀도이다.(ID, 주민번호 등등)
  중복되는 행수가 많을 수록 고밀도이다.(강남 사는 사람)

  최적화 실행 계획
   FTS을 수행하여 [강남] 사는 사람을 검색한다.
   인덱스를 사용하여 [노원] 사는 사람을 검색한다.

 

Cardinality
 행 집합에서 행의 수를 표시

 Base cardinality
  기본 테이블에 행의 수
 Join cardinality
  두 행 집합이 함께 조인되었을 때, 생산된 행의 수
 Distinct cardinality
  행 집합의 컬럼에 유일한 값의 수
 Group cardinality
  GROUP BY 연산 후에 행 집합에서 생성된 행의 수

 

Cost
 작업 단위의 수를 말한다.
 옵티마이저는 디스크 I/O, CPU 사용, 메모리 사용을 작업의 단위로 사용을 한다.

댓글 없음:

댓글 쓰기