Een geïndexeerd view (Indexed View, gematerialiseerd view met een index) is een view waarvoor een unieke clustereindex is gemaakt. Dit stelt je in staat om de resultaten van de query fysiek op schijf op te slaan en de index te gebruiken om de toegang te versnellen.
Voordelen:
Beperkingen:
TEXT, NTEXT, IMAGE kunnen niet worden gebruikt, sommige functies zijn niet toegestaan).CREATE VIEW dbo.SalesSummary WITH SCHEMABINDING AS SELECT SalesPersonID, COUNT_BIG(*) AS SalesCount, SUM(TotalDue) AS TotalDue FROM dbo.Sales GROUP BY SalesPersonID; GO CREATE UNIQUE CLUSTERED INDEX idx_SalesSummary ON dbo.SalesSummary (SalesPersonID);
Q: Kunnen alle views geïndexeerd worden (clustering)?
A: Nee, alleen views die volledig voldoen aan de beperkingen kunnen worden geïndexeerd (bijvoorbeeld geen externe verwijzingen, geaggregeerde functies zijn afgestemd, enz.). Anders zal de query voor het maken van de index een foutmelding geven.
Verhaal
In een echt project in het banksysteem was het nodig om de selecties van geaggregeerde rapporten te versnellen. Een geïndexeerd VIEW werd gemaakt zonder de belasting van het bijwerken van tabellen te analyseren. Bij massale invoeroperaties daalde de prestaties van de hoofdtabel drastisch als gevolg van aanzienlijke kosten voor het bijwerken van de view-index.
Verhaal
Een specialist dacht ten onrechte dat het mogelijk was om een VIEW met een opgave van JOIN naar een externe tabel en de functie GETDATE() te indexeren. De indexaanmaakquery eindigde met de foutmelding "Cannot create index on view with non-deterministic functions". Er werd een dag besteed aan het corrigeren van de projectarchitectuur.
Verhaal
In een groot e-commerce project leidde het bijwerken van gegevens in de basistabel "Products" tot blokkeringsproblemen. De oorzaak was onjuiste transactiebeheer bij het aanwezig zijn van een grote geïndexeerde VIEW, waarbij de aggregatie miljoenen rijen betrof.