[SAS 고급] 인덱스 사용하기1 (Using an Index1)
안녕하세요^^
이번 시간에는 지난 시간 인덱스 생성하는 방법을 이용하여, 인덱스를 사용하는 방법에 대해 알아보도록 하겠습니다. 어떤 상황에서 인덱스가 사용되는지에 대해 중점적으로 다뤄보도록 하겠습니다.
▶ WHERE문장에서 인덱스 사용을 결정하는 방법입니다.
▷ SAS는 인덱스를 사용할지, 사용하지 않을지를 다음과 같은 과정으로 결정합니다.
▶ 먼저, SAS는 사용 가능한 인덱스나 사용할 수 있는 인덱스가 있는지 결정합니다.
SAS는 WHERE 문장에서 simple 인덱스 타입의 key variable을 reference할 때 인덱스를 사용하거나, Composite 인덱스 타입의 primary key variable을 reference할 때 인덱스를 사용합니다
예를들어, 만약, WEHRE 문장에 CustomerID < 4100 이라는 조건이 주어진다면, simple 인덱스 타입의 key variable인 CustomerID를 reference할 때 인덱스를 사용합니다.
또한, 만약, WEHRE 문장에 OrderID < 1230063235 라는 조건이 주어진다면 composite 인덱스 타입의 primary key variable인 OrderID를 reference할 때 인덱스를 사용합니다.
WEHRE 절에 여러 개의 변수에 대한 여러 개의 조건을 작성하여도, 하나의 인덱스만 사용됩니다.
▶ Compound optimization은 single composite index를 사용하는 여러 개의 조건을 갖고 있는 WHERE절을 최적화 하는 과정입니다.
예를들어 위와 같은 WHERE절이 있다고 한다면, Compound optimization은 특정 상황에서만 적용할 수 있습니다. 위의 그림처럼, 처음 두 개의 Key variable은 composite 인덱스에 있어야 하며, 여러 개의 조건은 AND로 연결되어야 합니다. 또한, 하나의 조건이 =(EQ)이나 IN이어야 합니다.
▶ SAS가 인덱스를 사용하지 않는 상황을 살펴보도록 하겠습니다.
▷ SINGLE 인덱스가 모든 관찰값을 제공하는 경우가 아닌 상황
▷ TRIM이나 SUBSTR 이외의 어느 함수든 WHERE 절에 나타난 상황
▷ SUBSTR 함수가 시작 위치에서부터 문자열을 찾는 상황
▷ SOUNDS_LIKE 연산자(=*)가 WHERE 절에 포함된 상황
▷ IF 문장이 사용되어 Subsetting 하는 상황
▶ 다음으로, SAS는 관찰값의 개수도 인덱스를 사용할지를 결정하는 요인입니다.
▷ subset의 크기는 인덱스를 사용할 확률을 계산합니다.
만약, SAS 데이터셋의 크기 중 Subset의 크기가 3%라면 SAS는 인덱스를 사용합니다.
또한, 3% ~ 33.3%라면 SAS는 아마도 인덱스를 사용합니다.
마지막으로 33.3%보다 크다면 SAS는 인덱스를 사용할 확률이 낮습니다.
▶ 마지막으로, SAS가 인덱스를 사용할지 결정하는 요인은 I/O usage입니다.
▷ 다음은 I/O에 영향을 주는 요인들입니다.
만약 데이터가 WHERE절의 조건을 적용시키기 쉬운 순서대로 정렬되어 있다면, 적은 수의 데이터 셋의 페이지만 읽으면 되기 때문에, 적은 수의 I/O가 필요합니다.
즉, 위의 예시처럼, WHERE절에서 CustomerID에 대한 조건에, Customer_ID가 정렬되어 있는 경우를 의미합니다.
감사합니다^^
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.