In SQL zijn er twee types weergaven:
Gewone View zijn handig voor het abstraheren van complexiteit, het vereenvoudigen van toegang en het combineren van gegevens uit verschillende bronnen. Ze versnellen de verzoeken niet, omdat ze altijd on-the-fly worden gegenereerd.
Gematerialiseerde View bieden prestatievoordeel voor complexe rapportages en analyses, waar het belangrijk is om niet elke keer te wachten op aggregaties en joins. Ze moeten handmatig of volgens een schema worden geactualiseerd om verouderde gegevens te voorkomen.
CREATE VIEW active_users AS SELECT id, name FROM users WHERE status = 'active';
CREATE MATERIALIZED VIEW active_users_agg AS SELECT country, COUNT(*) as cnt FROM users WHERE status = 'active' GROUP BY country; -- Voor bijwerking: REFRESH MATERIALIZED VIEW active_users_agg;
Is het mogelijk om gegevens in een VIEW bij te werken en hoe hangt dit af van het type VIEW?
Vaak wordt ten onrechte aangenomen dat VIEW's volledig identiek zijn aan tabellen wat betreft bijwerkbaarheid. IN WERKELIJKHEID:
REFRESH, anders ontstaat er een inconsistentie in de gegevens.Verhaal 1
Een BI-rapport werd opgebouwd via een gewone VIEW met verschillende JOIN's en aggregaten. Na een toename van de belasting steeg de tijd voor het opstellen van het rapport tot tientallen minuten. Een systeemanalist stelde een gematerialiseerde weergave voor, wat de tijd onmiddellijk verminderde tot seconden, omdat de gegevens in een aparte tabel konden worden opgeslagen.
Verhaal 2
Een ontwikkelaar probeerde tijdens de migratie naar Oracle een UPDATE uit te voeren via een gewone VIEW, wat een fout veroorzaakte: "view with group by is not updatable". De oorzaak was het gebruik van GROUP BY in de weergave.
Verhaal 3
In een bedrijf vergaten ze de gematerialiseerde weergave bij te werken na het importeren van nieuwe gegevens, waardoor er inconsistentie ontstond in de rapporten tussen verschillende gebruikers, omdat de analyses op verouderde gegevens uit deze VIEW werkten. Daarna werd er een automatische REFRESH aan het schema toegevoegd.