[Database] Views om preformance te verbeteren

Pagina: 1
Acties:

  • FragDaddy
  • Registratie: Mei 2000
  • Laatst online: 01-09 14:47
Stel, ik heb een tabel met 5 miljoen records. ik hoef maar te queryen op ongeveer 200 records. de andere records doen niet ter zake. nou kan ik alvast een view aanmaken zodat ik alleen die 200 records zie. nu kan ik op die view queryen.

helpt dit me, omdat de query maar 200 records doorhoeft, ipv 5 miljoen, of negeert de query de view en gaat ie gewoon alles door?

ik heb al even wat boeken over database views doorgelezen, maar daar staat niets over het gebruik van views om snelheid te winnen.

Have a wheelie good weekend!


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02:09
Ik denk dat het afhangt van de specifieke database server, in hoeverre een view efficienter of minder efficient is dan een query op de daadwerkelijke tabel.

Conceptueel is een view natuurlijk alleen maar een andere 'kijk' op een tabel en hoeft als zodanig niet afzonderlijk opgeslagen te worden. 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.

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, maar ik denk dat dat niet vaak gedaan wordt. Ik kan me voorstellen dat dat gemiddeld genomen meer overhead dan performance winst oplevert.

Views zijn nooit bedoeld als optimalisatiemechanisme dus je kunt er niet vanuit gaan dat ze efficienter zijn dan de tabel waar ze op terugslaan. In een specifieke implementatie zou dat misschien anders kunnen zijn, maar daar zou ik niets van weten.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
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.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment