SQL 인덱스 튜닝

조아라·2022년 11월 26일
0

SQL

목록 보기
5/5

인덱스 튜닝

Table Scan

Heap Table

  • Clustered Index가 없는 Table (Data Page)

Table Scan

  • Heap Table에서 인덱스 사용하지 않는 데이터 검색
  • Full Scan(전체 검색)
  • OLTP 성 쿼리 인 경우 Table Scan이 되면 안됨

RID Lookup (Row ID Lookup)

논리적으로 Select 하는 행 수 만큼 읽는다. (물리적

Nonclustered Index 설계

  • 결과 행 수가 작은 조건 열
    • 선택도가 높은 조건
  • 결과 행 크기가 작은 쿼리

Clustered Index

트랜댁션 성능을 위한 후보 열 선택

  • OLTP성
  • UNIQUE 할 것
  • 키 길이가 작은 것
  • 정적인 데이터일 것(한번 Insert 되면 못바꾸는)
    • 아니면
      • 키 값 Update 시 위치 이동 가능
      • 유지 관리 비용 발생
      • Page Split 유발
  • 조회 쿼리 성능을 불만족
  • 쿼리 성능을 위한 후보 열 선택
    • 대량 범위 조건을 가지고 있는가?
    • 공통 조건으로 많이 사용되는가?
    • Group by 절에 많이 사용되는가?
    • 대량 조인 조건으로 사용되는가?
    • 정렬 조건으로 많이 사용되는가?

Covering Index

  • Lookup 을 수행하지 않는 경우의 Nonclustered Index
  • Lookup 으로 인한 과도한 random I/0를 줄이자
    • 사용은 주의

Included Columen (포괄 열)

  • Key열 대신 Key가 아닌 열로 구성
    • Where, group by, join에 사용되어 key로 설정이 되어야 한다면 covering index
    • 단순히 select를 할 것이라면 포괄 열

Composite(복합) Index

  • PK는 비즈니스 순서 고려
  • 열 순서 중요하게 고려(인덱스에서 검색할 작업량을 최소화 목적)
    • 최소 열 수 원칙
    • (=Equal) 조건이 앞에 있으면 좋고 범위 조건은 뒤로 놓을 수록 좋음 (Equal 조건이 아닌 경우 하위 열은 인덱스 조건 상실 Index Seek 함)
    • 모두 범위 조건인 경우 or 상위 일부 열만 조건 식에 사용된다면?
      • 조건식

0개의 댓글