DB 관리 TIP

결합인덱스 선택도

mitomi 2021. 12. 16. 22:57
반응형
SMALL

1. 선택도(Selectivity) :  전체 레코드 중에서  조건절에 의해 선택되는 레코드 비율

    카디널리티 = 선택도 * 총레코드 수

 

   인덱스 선택도란 ? 인덱스 컬럼을 모두 '='로 조회할때  평균적으로 선택되는 비율을 의미

   선택도가 높은(카디널리티가 높은) 인덱스는 생성해봐야  테이블 액세스만 많이 발생함

   (만든의미가 없음) 인덱스를 생성할때는 반드시~ 선택도 카디널리티  확인!!

    * 카디널리티 = 1 : 해당컬럼 '=' 조건으로 조회 시 평균 1건 조회됨을 의미

--카드널리티 조회 쿼리

SELECT COUNT(*) AS NDV, MAX(CNT) AS MAX_CARD, MIN(CNT) MN_CARD, AVG(CNT) AS AVG_CARD
 FROM (
             SELECT ORD_DT, SHOP_NO, COUNT(*) AS CNT FROM DEV.ORD_RANDOM
              WHERE (ORD_DT IS NOT NULL OR SHOP_NO IS NOT NULL)
              GROUP BY ORD_DT, SHOP_NO 
         );

       NDV    MAX_CARD   MN_CARD   AVG_CARD
-------------  ------------   ------------- ---------------
    146000        154              65        102.739726

NDV : Number of Distinct Values (컬럼에 입력된 값의 종류 개수)

 

2. 결합인덱스 컬럼 간 순서 정할 때 선택도 중요할까?

  - 컬럼의 액세스 조건이라 어떤 컬럼이 먼저 오든 스캔범위는 같음

  - 항상 사용하는 컬럼을 앞쪽에 두고 그중 '=' 조건 앞쪽에 위치 시키는 것 뿐~

 

!! 인덱스 생성 여부를 결정할때는 선택도가 매우 중요

!! 컬럼간 순서를 정할 때는 컬럼의 선택도보다는 필수조건 여부, 연산자 형태가 더더더한 판단 기준임~

728x90

'DB 관리 TIP' 카테고리의 다른 글

[MS-SQL] 실행창(cmd) 접속 및 문자열 날짜 변환  (0) 2021.12.24
[ROLE에 부여된 권한 확인]  (0) 2021.12.23
[ORACLE]인덱스 스캔 방식  (0) 2021.07.05
[ORACLE] ROWID 특징  (0) 2021.07.04
[ORACEL] 인덱스 특징  (0) 2021.07.04