안녕하세요. SQLER의 코난 김대우입니다. 
이번 강좌에서는, 7-9. 인덱싱된 뷰(Indexed View)를 진행 하겠습니다.


SQLER에서 진행되는, 챗GPT와 함께 배우는 SQL Server 강좌 목록

 

이번에 진행할 강좌는 인덱싱된 뷰입니다.

 

 

 

TL;DR

뷰에 인덱스를 생성하는 예제로, 인덱싱된 뷰 작동 방식을 진행하고, 실행계획을 통해 성능을 확인하며, 끝으로 인덱스 공간 사용을 소개합니다.



인덱스(Index - 색인)는 간략히 데이터베이스에서 데이터를 빠르게 찾기 위한 장치입니다. SQL Server의 인덱스는 빠르게 데이터를 찾기 위해 B-Tree(Balanced Tree) 구조의 추가 저장소를 유지하며 지속적으로 인덱스 데이터를 업데이트합니다.

 

 

인덱싱된 뷰란

인덱싱된 뷰는 무엇일까요? 뷰는 테이블을 반영하는 거울인데, 이 거울에 인덱스를 생성하고 사용한다? 뷰에 인덱스를 생성하고 빠르게 쿼리 하는 방안에 대해서 논의합니다.
 

USE AdventureWorks;
GO

-- 뷰가 존재하면 삭제
IF OBJECT_ID(N'Sales.vSalesOrderGroup', N'V') IS NOT NULL  
   DROP VIEW Sales.vSalesOrderGroup;  
GO

-- 많은 데이터가 필요해 Sales.SalesOrderDetail 사용
SELECT SalesOrderID, COUNT_BIG(*) AS SaleOrderCount, Sum(LineTotal) AS SalesOrderTotal 
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID;
GO

-- 31,465건의 GROUP BY 결과에 대해 뷰 생성
CREATE VIEW Sales.vSalesOrderGroup
WITH SCHEMABINDING
AS
SELECT SalesOrderID, COUNT_BIG(*) AS SaleOrderCount, Sum(LineTotal) AS SalesOrderTotal 
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID;
GO

-- 테스트 조회
SELECT * FROM Sales.vSalesOrderGroup;
GO

-- 뷰가 공간을 차지하는지 확인. 0KB 사이즈
EXEC sp_spaceused 'Sales.vSalesOrderGroup';
GO

-- 뷰에 색인 생성
CREATE UNIQUE CLUSTERED INDEX IDX_vSalesOrderGroup
   ON Sales.vSalesOrderGroup (SalesOrderID);
GO

-- 실행계획을 확인하면 클러스터드 인덱스 검색(Seek) 수행
SELECT * FROM Sales.vSalesOrderGroup
WHERE SalesOrderID = 43659;
GO

-- 인덱싱된 뷰가 공간을 차지하는지 확인. 저장소를 사용함.
EXEC sp_spaceused 'Sales.vSalesOrderGroup';
GO

 

Sales.SalesOrderDetail 테이블에서 GROUP BY 된 결과셋을 이용해 뷰를 생성했습니다. - 전형적인 뷰입니다. 이 뷰에 테이블과 같은 방식으로 인덱스를 생성합니다. 인덱싱된 뷰를 생성할 때 집계 함수 사용 등 약간의 제약이 있지만(COUNT 사용 제한 등), 대부분 해결할 수 있습니다.


이어서 인덱싱된 뷰에 대해 쿼리하고 실행계획을 보면, 빠르게 데이터를 찾는 것을 확인할 수 있습니다.

 

89-1 인덱싱된뷰-실행계획.png

이미지 - 인덱싱된 뷰 실행계획


재미있는 부분은, 뷰는 테이블을 반영하는 거울이라서 공간을 사용하지 않습니다. 하지만, 인덱싱된 뷰는 보시는 것처럼 공간을 사용합니다.
이렇게 인덱싱된 뷰에 대해서 살펴봤습니다. 다음은 뷰 마지막 강좌 - 실무에서 뷰 사용입니다.

 

SQL 강좌 책 구매

강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다. 

 

책구매 링크: 챗GPT와 함께하는 마이크로소프트 SQL Server 2022 

책구매링크.png

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 34960
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 17247
2274 SQL강좌: 8-3. 저장 프로시저 - 매개변수(파라미터) 코난(김대우) 2023.08.18 78
2273 SQL강좌: 8-2. 저장 프로시저 - 생성과 실행 코난(김대우) 2023.08.18 104
2272 SQL강좌: 8-1. 저장 프로시저(Stored Procedure) - 소개 코난(김대우) 2023.08.18 84
2271 SQL강좌: 7-10. 실무에서 뷰 사용 코난(김대우) 2023.08.18 52
» SQL강좌: 7-9. 인덱싱된 뷰(Indexed View) file 코난(김대우) 2023.08.18 62
2269 SQL강좌: 7-8. 분할 뷰(Partitioned View) file 코난(김대우) 2023.08.18 45
2268 SQL강좌: 7-7. 뷰에서 데이터 수정 코난(김대우) 2023.08.18 47
2267 SQL강좌: 7-6. 뷰에서 뷰 생성 코난(김대우) 2023.08.18 67
2266 SQL강좌: 7-5. 뷰 옵션 코난(김대우) 2023.08.18 40
2265 SQL강좌: 7-4. 뷰 삭제 코난(김대우) 2023.08.18 32
2264 SQL강좌: 7-3. 뷰 수정 코난(김대우) 2023.08.18 52
2263 SQL강좌: 7-2. 뷰 생성 file 코난(김대우) 2023.08.18 48
2262 SQL강좌: 7-1. 뷰(VIEW) 소개 코난(김대우) 2023.08.18 84
2261 SQL강좌: 6-9. 데이터 무결성 - 데이터 무결성 주의사항 file 코난(김대우) 2023.08.18 70
2260 SQL강좌: 6-8. 데이터 무결성 - 트리거(TRIGGER) file 코난(김대우) 2023.08.18 100
2259 SQL강좌: 6-7. 데이터 무결성 - 사용자 정의 형식(User-Defined Type - UDT) 코난(김대우) 2023.08.18 59
2258 SQL강좌: 6-6. 데이터 무결성 - 기본값(DEFAULT) file 코난(김대우) 2023.08.18 35
2257 SQL강좌: 6-5. 데이터 무결성 - 규칙(RULE) 코난(김대우) 2023.08.18 58
2256 SQL강좌: 6-4. 데이터 무결성 - 체크 제약(CHECK Constraint) file 코난(김대우) 2023.08.18 65
2255 SQL강좌: 6-3. 데이터 무결성 - 기본 키(Primary Key) 제약, UNIQUE 제약, 외래 키(Foreign Key) 제약 file 코난(김대우) 2023.08.18 86





XE Login