ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Clustered vs NonClustered
    데이터베이스 with MSSQL/SQL 튜닝 2022. 4. 13. 17:02

    1. Clustered vs NonClustered

    - 데이터 접근

    Clustered실제 데이터가 리프 페이지에 저장되어 있음

    Leaf Page = Data Page 
    데이터는 Clustered Index키 순서로 정렬이 된다.

     

    Non-ClusteredHeapRID의 주소를 참조하여 데이터에 접근함.

     

    2. 클러스티드 인덱스가 논클러스티드 인덱스에 미치는 영향

    - Clustered Index 유무에 다른 동작

    1) Clustered Index가 없는 경우

    - 데이터가 Heap Table이라는 곳에 저장

    - Heap RID -> Heap Table로 접근하여 데이터를 추출

    2) Clustered Index가 있는 경우

    - Heap Table이 없음

    - Leaf Table에 실제 데이터가 있다.

    - Clustered Index의 실제 키 값을 들고 있는다.

     

    - Non-Clustered Index 조회

    SELECT *
    INTO TestOrderDetails
    FROM [Order Details];
    
    SELECT *
    FROM TestOrderDetails;
    
    -- Non-Clustered 인덱스 추가
    CREATE INDEX Index_OrderDetails
    ON TestOrderDetails(OrderID, ProductID);
    
    -- 인덱스 정보
    EXEC sp_helpindex 'TestOrderDetails';
    
    -- 인덱스 번호 찾기
    SELECT index_id, name
    FROM sys.indexes
    WHERE object_id = object_id('TestOrderDetails');
    
    -- Non-Clustered Index조회
    -- PageType 1(DATA PAGE) 2(INDEX PAGE)
    DBCC IND('Northwind', 'TestOrderDetails', 2);

    위의 코드를 생성하면 아래와 같은 트리 구조로 인덱스 페이지가 생성이 된다.

                 928
    832 856 857 858 859 860

     

    이 때 Clustered Index를 생성해보면 Non-Clustered Index에 미치는 영향을 살펴보자.

    CREATE CLUSTERED INDEX Index_OrderDetails_Clustered
    ON TestOrderDetails(OrderID);

    그런데 여기서 클러스티드 인덱스를 생성하면 논 클러스티드의 인덱스 페이지 번호가 재편성이 된다.

    그 이유는 클러스티드 인덱스가 생성됨에 따라 실제 데이터가 정렬되어서 기존의 인덱스 페이지 번호도 재편성되기 때문이다. 인덱스 번호는 아래와 같이 재편된다.

                 1000

    960 968 969 970 971 972

     

     

    그리고 페이지 타입이 2번인걸 알 수 있는데

    1번은 DATA PAGE를 뜻하고 2번은 INDEX PAGE를 뜻한다.

    클러스티드 인덱스는 1번에서 설명한 것 처럼 Leaf Page = Data Page이기 때문에 1번이 떠야하고

    논클러스티드 인덱스는 Index Page가 떠야하므로 2번이 떠야하는데 위에 보시다시피 2번이 뜨는 것을 알 수 있다.

     

    DBCC PAGE('Northwind', 1, 960,3);

    그리고 페이지를 조회해보면 UNIQUIFIER(key)가 새로 생겨났는데 OrderID(기존의 Index)에 번호를 매겨서 중복된 값을 구분해주는 역할을 한다.

     

    위의 결과를 통해 Clustered Index를 생성하면 Non-Clustered인덱스에도 영향이 가는 것을 알 수 있다.

    정리해보자면, 페이지가 재편성되었고 페이지 내부에는 UNIQUIFIER(key)가 새로 생겨났다.

     

    - Clustered Index 조회

    Clustered Index를 조회 해보면 Page Type이 1번인 것을 보아 Leaf Page = Data Page임을 다시 확인할 수 있다.

    '데이터베이스 with MSSQL > SQL 튜닝' 카테고리의 다른 글

    복합 인덱스 컬럼 순서  (0) 2022.04.15
    북마크 룩업  (0) 2022.04.15
    Index Scan vs Index Seek  (0) 2022.04.14
    복합 인덱스  (0) 2022.04.13
    인덱스 분석  (0) 2022.04.13
Designed by Tistory.