'Indexed view'에 해당되는 글 1건

  1. 2013.11.04 Indexed View(인덱싱된 뷰)
MS SQL2013.11.04 10:44

 

[설명]

 

인덱싱된 뷰란?

실제데이터가 존재하며, 그 데이터는 고유 클러스터형 인덱스에 의해서 정렬이 되어 있는 뷰입니다.

 

 

[인덱싱된 뷰의 장점]

 

자주 사용되는 뷰의 경우, 아예 뷰에 실제 데이터가 존재하게 되면 뷰까지만 접근해도 결과를 얻을 수 있게

되어서 쿼리의 성능이 향상 될 것입니다.

 

 

[인덱싱된 뷰의 단점]

 

뷰를 만들 때 참조한 테이블이 변경 될때마다, SQL Server가 인덱싱된 뷰의 실제 데이터 부분도 같이 변경해야 합니다.

 

 

[방법]

 

CREATE VIEW 뷰이름 WITH SCHEMABINDING AS SELECT 구문
CREATE UNIQUE CLUSTERED INDEX
인덱스이름 ON _이름(뷰의 열_이름)

 

[Test]

 

인덱스 뷰로 만들 쿼리 실행하면 아래와 같이 많은 비용이 사용된 것을 확인할 수 있습니다.

 

 

 

아래의 쿼리로 뷰를 먼저 생성하고, 뷰에 사용하기 적합한 클러스터 인덱스를 생성합니다.

 

CREATE VIEW vProductSum WITH SCHEMABINDING AS

SELECT P.ProductID, COUNT_BIG(*) AS Count, P.Name, SUM(O.OrderQty) AS SumOerQty, SUM(O.LineTotal) AS SumLineTotal

FROM Production.Product P

INNER JOIN Sales.SalesOrderDetail O

        ON P.ProductID = O.ProductID

GROUP BY P.ProductID, P.Name;

GO

 

CREATE UNIQUE CLUSTERED INDEX vIdx_vProductSum ON vProductSum(ProductID);

 

 

아래와 같이 생성된 뷰에 클러스터 인덱스가 생성된 것을 확인할 수 있습니다.

 

뷰를 검색해 보면 아래와 같이 논리적 읽기 수가 5로 줄어 든 것을 확인할 수 있습니다.

 

[특징]

 

인덱싱된 뷰는 업데이트가 드물게 일어나는 테이블에 인덱싱된 뷰를 생성하는 것이 좋습니다.

인덱싱된 뷰를 생성해 놓으면, 인덱싱된 뷰자체를 조회하는 것뿐 아니라, 일반 쿼리도 인덱싱된 뷰를 사용할 수 있는 경우에는 SQL Server는 알아서 인덱신된 뷰를 사용하는 효율적인 처리를 하는 것입니다.

 

[참고]

http://msdn.microsoft.com/ko-kr/library/ms191432.aspx

신고
Posted by TM ~ing