Did you specify the columns that you actually selected? If you do not have a coverage index in the indexed view for your query, you are sure to find a table faster. However, if you do this, there should be no real difference. Example:
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)
So far so good. Now we will try to choose the following from this view:
SELECT id, col3 FROM denormalized
The only data stored for this view is the index in the ID column - the rest should be a warm up on the fly. Thus, ISNULL is computed again for each row. However, if we add this index:
CREATE INDEX IX_denormalized
ON dbo.denormalized (id, col3)
- , .