Tuning/INDEX

SQL 성능을 결정하는 처리 범위

cororo2 2023. 9. 20. 16:36
요약
인덱스의 가장 중요 요소는 처리범위를 최소화 시키는것으로 결합 칼럼 인덱스의 효율이 높다.
결합 칼럼 인덱스 생성을 위해서는 점 조건과 선분조건 순서에 의해 처리범위가 변한다는 것을 고려하여 생성 필요하다.

Index 사용이유

대용량의 데이터에서 원하는 적은 데이터 추출을 위해

 

 

SQL 성능 결정요인

  •  처리 범위의 양
  •  랜덤 액세스의 양
  •  정렬의 양

처리범위란?

  • 액세스 해야하는 데이터가 적음을 의미
  • 액세스 해야하는 데이터가 적다면 인덱스를 이용하여 성능 보장 가능

 

예제로 이해하기

SELECT 카드번호, 사용액
  FROM 거래내역
 WHERE 거래일자 = '200803'
  AND 사용구분 = '정상'

위의 SQL로 생성 가능한 Index는 

  • 거래일자 Index
  • 사용구분 Index
  • 거래일자 + 사용구분 Index
  • 사용구분 + 거래일자 Index

- 거래일자 

  1. 거래일자 Index이용시 처리 범위는 거래일자로만 감소
  2. 거래일자 칼럼이 200803인 데이터 모두 액세스
  3. 엑세스한 데이터 중 사용구분이 정상인 데이터만 결과로 추출

거래일자에 의해서만 처리범위가 감소하고 사용구분으로는 처리범위 감소하지 않음

 

- 사용구분 

  1. 사용구분으로 Index이용시 처리범위는 사용구분으로만 감소
  2. 사용구분이 정상인 데이터만 액세스
  3. 액세스한 데이터 중 거래일자 값이 200803인 데이터만 결과로 추출

사용구분에 의해서만 처리범위 감소하고 거래일자로는 처리일자 감소하지 않음

 

- 거래일자+사용구분

  1. 거래일자가 200803인 데이터만 액세스
  2. 거래일자가 200803으로 감소된 처리범위에서 사용구분의 값이 정상인 데이터만 액세스

단일 칼럼 인덱스에 비해 처리범위 많이 감소

 

- 사용구분+거래일자

  1. 사용구분 값이 정상인 데이터만 액세스
  2. 감소된 처리범위에서 거래일자가 200803인 데이터만 액세스

단일 칼럼 인덱스에 비해 처리 범위가 많이 감소하여 SQL 성능에 대한 기대 가능

 

Where 절에 사용되는 연산자

  • where절 조건에 존재하는 칼럼에 순서에 상관없이 결합 칼럼 인덱스를 생성한다고 처리범위가 감소하는 것은 아님
  • where절에 사용하는 연산자에 따라 우선순위 정해야함
  • where 절에 사용하는 조건은  아래 2가지로 구분
    • 점조건 : IN, = 연산자를 이용한 조건을 의미 ex) 사용구분
    • 선분조건 : Like, Between , <, >, 등과 같이 점 조건을 제외한 연산사 사용 조건, 선분 조건은 하나의 점이 아닌 해당 조건을 만족하는 모든 실수를 의미

조건에 사용되는 연산자에 의해 액세스 해야하는 처리범위의 차이 발생

  • 점조건 + 점조건 : 두 조건에 의해 처리범위 감소
  • 점 조건 + 선분 조건 : 두 조건에 의해 처리 범위 감소
  • 선분 조건 + 선분 조건 : 앞의 선분 조건에 의해 처리 범위 감소
  • 선분 조건 + 점 조건 : 앞의 선분 조건에 의해 처리 범위 감소

<EX>

SELECT 카드번호, 사용액
  FROM 거래내역
 WHERE 거래일자 > '200803'
  AND 사용구분 = '정상'
  • 거래일자 = 선분조건   /   사용구분 = 점조건
  • 해당 SQL의 최적의 인덱스는 사용구분+거래일자 인덱스
  • 점 조건+ 선분 조건으로 두 개의 조건에 의해 처리범위 감소

 

출처 : http://www.gurubee.net/lecture/2228

 

SQL의 성능은 처리 범위에 좌우된다

데이터베이스가 대용량으로 변화면서 우리는 항상 성능을 고민하게 된다. 이는 많은 데이터 중 우리가 원하는 데이터를 추출하는 것이 말처럼 쉽지만..

www.gurubee.net