2010-01-07 2 views
3

쿼리 성능을 향상시키기 위해보고해야하는 정보가 들어있는 비정규 인덱스 된 뷰를 만들었습니다. 필자가 기대했던 성능 향상을 얻지 못했을 때 인덱스를 사용하여 뷰의 테이블 버전을 생성하고 성능이 크게 향상되었습니다.인덱싱 된 뷰가 아닌 인덱스가있는 실제 비정규 화 테이블을 사용하는 SQL 쿼리 성능이 향상 되었습니까?

내보기를 만들 때 SELECT에 많은 ISNULL이 있음에 유의해야합니다. 이러한 열이 일반보기에 조인 된 경우 성능이 저하 될 수 있음을 알고 있지만보기가 인덱싱되면 괜찮을 것이라고 생각합니다. ISNULLs가 문제가 될 수 있습니까?

답변

4

실제로 선택한 열의 색인을 생성 했습니까? 쿼리의 인덱싱 된 뷰에 커버 인덱스가없는 경우 테이블이 더 빠름을 확실히 알 수 있습니다. 그렇다면 실제적인 차이가 없어야합니다. 예 :

CREATE VIEW dbo.denormalized 
WITH SCHEMABINDING 
AS 
    SELECT A.id, 
      A.col1, 
      A.col2, 
      ISNULL(B.col3, '') col3 
    FROM dbo.A LEFT JOIN dbo.B ON A.Bid = B.id 
GO 

CREATE UNIQUE CLUSTERED INDEX UIX_denormlaized 
ON dbo.denormalized (id) 

지금까지는 그렇게 좋았습니다. 이제, 우리는 다음과 같이보기에서 선택하려고 :

SELECT id, col3 FROM denormalized 

이 만이 뷰에 대한 데이터를 지속은 ID 컬럼에 인덱스 - 나머지는 즉시 밖으로 운동이어야한다. 따라서 ISNULL은 각 행에 대해 다시 계산됩니다. 테이블에서 선택에 더 빨리, 사실 동등한 성능 - 다음 같은 쿼리가 지속 된 인덱스에서 완전히 제공됩니다

CREATE INDEX IX_denormalized 
ON dbo.denormalized (id, col3) 

: 우리는이 인덱스를 추가 그러나합니다.

+0

테이블과 뷰는 서로 정확하게 일치했습니다. 색인 및 모두. 성능이 동일하지 않아야합니까? –

+0

아니요 위의 예를 참조하십시오. –

+0

아주 좋은 설명. 고맙습니다! –

1

어떤 SQL Server SKU가 있습니까? Enterprise Edition 만 쿼리 계획에서 인덱싱 된 뷰를 고려합니다. Standard Edition은 select가 뷰에서 나오지 않고 NOEXPAND 힌트를 사용하지 않는 한 인덱스 된 뷰를 고려하지 않습니다.

인덱싱 된 뷰는 어떤 판에서 만들 수 있습니다 : 나는 이미, 나는 관련 MSDN 페이지 Resolving Indexes on Views을 연결하고있어 알고 유용합니다 나타내는 두 가지 의견을 가지고 있기 때문에

업데이트

SQL 서버. SQL Server Enterprise에서 쿼리 최적화 프로그램 은 인덱싱 된 보기를 자동으로 고려합니다. 모든 다른 버전의 인덱싱 된보기를 사용하려면 NOEXPAND 테이블 힌트를 사용해야합니다.

+0

그것은 EE입니다. 그래도 NOEXPAND 힌트에 대해 알고 잘. –

+0

+1 : 매우 흥미로운 점 –

관련 문제