실제로 선택한 열의 색인을 생성 했습니까? 쿼리의 인덱싱 된 뷰에 커버 인덱스가없는 경우 테이블이 더 빠름을 확실히 알 수 있습니다. 그렇다면 실제적인 차이가 없어야합니다. 예 :
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)
: 우리는이 인덱스를 추가 그러나합니다.
테이블과 뷰는 서로 정확하게 일치했습니다. 색인 및 모두. 성능이 동일하지 않아야합니까? –
아니요 위의 예를 참조하십시오. –
아주 좋은 설명. 고맙습니다! –