ProgrammatieBackend ontwikkelaar

Wat is een geïndexeerd view (Indexed View) in SQL, hoe wordt het geïmplementeerd, waarvoor wordt het gebruikt en wat zijn de valkuilen bij het gebruik ervan?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

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:

  • Snelle selectie van geaggregeerde of vaak gebruikte gegevens.
  • Vermindert de belasting van realtime berekeningen.

Beperkingen:

  • Niet alle soorten queries worden ondersteund (bijvoorbeeld de data types TEXT, NTEXT, IMAGE kunnen niet worden gebruikt, sommige functies zijn niet toegestaan).
  • Extra kosten voor het onderhouden van de index bij wijzigingen in de basistabel.
  • Vereist naleving van een strikte set regels bij het declareren.

Voorbeeldcode

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);

Misleidende vraag.

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.

Voorbeelden van echte fouten door onwetendheid over de details van het onderwerp.


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.