BookmarkSubscribeRSS Feed

[SAS 고급] 인덱스 사용하기1 (Using an Index1)

Started ‎06-17-2020 by
Modified ‎06-17-2020 by
Views 181

[SAS 고급] 인덱스 사용하기1 (Using an Index1)

 

 

안녕하세요^^

 

이번 시간에는 지난 시간 인덱스 생성하는 방법을 이용하여, 인덱스를 사용하는 방법에 대해 알아보도록 하겠습니다. 어떤 상황에서 인덱스가 사용되는지에 대해 중점적으로 다뤄보도록 하겠습니다.

 

 

 WHERE문장에서 인덱스 사용을 결정하는 방법입니다.

 SAS는 인덱스를 사용할지, 사용하지 않을지를 다음과 같은 과정으로 결정합니다. 

 

SE22017041918501070.jpg

 

▶ 먼저, SAS는 사용 가능한 인덱스나 사용할 수 있는 인덱스가 있는지 결정합니다

 

SE22017041918555170.jpg

 

SAS WHERE 문장에서 simple 인덱스 타입의 key variable reference할 때 인덱스를 사용하거나, Composite 인덱스 타입의 primary key variable reference할 때 인덱스를 사용합니다

 

예를들어, 만약, WEHRE 문장에 CustomerID < 4100 이라는 조건이 주어진다면, simple 인덱스 타입의 key variable인 CustomerID를 reference할 때 인덱스를 사용합니다. 

 

SE22017041919004170.jpg

 

또한만약, WEHRE 문장에 OrderID < 1230063235 라는 조건이 주어진다면 composite 인덱스 타입의 primary key variable OrderID reference할 때 인덱스를 사용합니다

 

SE22017041919005870.jpg

 

WEHRE 절에 여러 개의 변수에 대한 여러 개의 조건을 작성하여도하나의 인덱스만 사용됩니다

 

SE22017041919013370.jpg

 

 Compound optimization single composite index를 사용하는 여러 개의 조건을 갖고 있는 WHERE절을 최적화 하는 과정입니다

 

SE22017041919014970.jpg

 

예를들어 위와 같은 WHERE절이 있다고 한다면, Compound optimization은 특정 상황에서만 적용할 수 있습니다. 위의 그림처럼, 처음 두 개의 Key variable composite 인덱스에 있어야 하며, 여러 개의 조건은 AND로 연결되어야 합니다. 또한, 하나의 조건이 =(EQ)이나 IN이어야 합니다.

 

 

 SAS가 인덱스를 사용하지 않는 상황을 살펴보도록 하겠습니다.

 SINGLE 인덱스가 모든 관찰값을 제공하는 경우가 아닌 상황

 

SE22017041919020770.jpg

 

 TRIM이나 SUBSTR 이외의 어느 함수든 WHERE 절에 나타난 상황

 

SE22017041919022270.jpg

 

 SUBSTR 함수가 시작 위치에서부터 문자열을 찾는 상황

 

SE22017041919025370.jpg

 

▷ SOUNDS_LIKE 연산자(=*) WHERE 절에 포함된 상황

 

SE22017041919030670.jpg

 

 IF 문장이 사용되어 Subsetting 하는 상황

 

SE22017041919031270.jpg

 

 

▶ 다음으로, SAS는 관찰값의 개수도 인덱스를 사용할지를 결정하는 요인입니다.

 

SE22017041919032570.jpg

 

▷ subset의 크기는 인덱스를 사용할 확률을 계산합니다

 

SE22017041919050970.png

 

만약, SAS 데이터셋의 크기 중 Subset의 크기가 3%라면 SAS는 인덱스를 사용합니다.

또한, 3% ~ 33.3%라면 SAS는 아마도 인덱스를 사용합니다.

마지막으로 33.3%보다 크다면 SAS는 인덱스를 사용할 확률이 낮습니다. 

 

 

▶ 마지막으로, SAS가 인덱스를 사용할지 결정하는 요인은 I/O usage입니다. 

 

SE22017041919034370.jpg

 

▷ 다음은 I/O에 영향을 주는 요인들입니다.

 

SE22017041919054870.jpg

 

만약 데이터가 WHERE절의 조건을 적용시키기 쉬운 순서대로 정렬되어 있다면적은 수의 데이터 셋의 페이지만 읽으면 되기 때문에적은 수의 I/O가 필요합니다

 

SE22017041919060970.jpg

  

위의 예시처럼, WHERE절에서 CustomerID에 대한 조건에, Customer_ID가 정렬되어 있는 경우를 의미합니다.
 

 

감사합니다^^ 

 

 

Version history
Last update:
‎06-17-2020 02:41 AM
Updated by:
Contributors

sas-innovate-wordmark-2025-midnight.png

Register Today!

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.


Register now!

Article Labels
Article Tags