Soultaker: Ik kan me dan ook voorstellen dat een eenvoudige databaseserver een query op een view gewoon omschrijft naar een query op de 'echte' tabel en het resultaat op de 'echte' tabel uitvoert.
Dat is inderdaad de oplossing die meestal gebruikt wordt.
Uiteraard zou een database server zo slim kunnen zijn om een lokale kopie te maken van de view en die afzonderlijk up te daten, zodat er efficienter in gezocht kan worden
Dat kan inderdaad. Serieuzere database systemen ondersteunen vaak zogenaamde 'materialized views'. Dit zijn in feite views die ook daadwerkelijk opgeslagen zijn (materialized dus) in het systeem, waardoor er zeer efficient queries uitgevoerd kunnen worden over deze views. In de serieuzere oplossingen kan het dbms deze materialized view ook daadwerkelijk up-to-date houden ten opzichte van de data waaruit de view is afgeleid. Als dit niet mogelijk is, krijg je meer een soort datawarehouse opzet, waar ook vaak afgeleide views worden gebruikt om efficient queries uit te kunnen voeren, maar de data dus statisch is.
We hebben het een tijd geleden een paar keer over materialized views gehad hier op GoT: vooral over de methoden die de verschillende database systemen ondersteunen en de voor- en nadelen ervan. ff zoeken dus als je meer wilt weten over de systemen die dit ondersteunen .
Ik kan me voorstellen dat dat gemiddeld genomen meer overhead dan performance winst oplevert.
Dat denk ik niet: de performance winst kan enorm zijn, zeker in dergelijke typische situaties. Uiteraard moet het up-to-date houden van de materialized view wel efficient kunnen gebeuren.
Een andere oplossing is het definieren van een goede index. Als de reductie van de relatie ook op basis van deze index kan gebeuren, kunnen de goede rijen zeer efficient worden gevonden.