Eerst even een korte uitleg.
We hebben een SQL query en roepen die aan via een classic ASP pagina.
Vervolgens lopen we met een for-lus eerst door de metadata heen van de teruggegeven data (dus alle kolomnamen en -type).
Dit gaat enorm traag. Het zijn +- 900 kolommen (ja, niet efficient, maar dat is nu even niet de discussie) en kan er voor zorgen dat IIS +- 67 seconden staat te stampen op die for-loop. Daarbij op te merken dat de query zelf binnen enkele milliseconden gewoon data teruggeeft. Dus de query an sich is snel, maar de verdere verwerking in ASP code is enorm traag.
Nu is het geval dat we het probleem hebben weten te traceren tot het volgende:
In de SQL query wordt, naast gewone kolommen, ook gebruik gemaakt van SQL Scalar valued functions.
SELECT Col1, Col2, Col3, dbo.Functie1(col4, col5), dbo.Functie2(col6, col7) FROM table inner join blabla....
Halen we de 2 scalar valued functies uit de query, gaat de for-loop weer als een malle.
We weten dus wat het probleem veroorzaakt, maar weten niet hoe het op te lossen, want we hebben geen flauw idee waar we op moeten googlen. Hoe heet dit fenomeen? Het lijkt erop dat wanneer we van het ADO.RecordSet object, de kolom typen en namen ophalen, de applicatie terug gaat naar de database om die info op te halen. Ik was altijd in de veronderstelling dat die metadata reeds in de geretourneerde RecordSet object aanwezig was.
Ik hoop dat iemand mijn probleem omschrijving snapt en me in een juiste richting kan duwen.
ps. Voor het eerst dat ik gewoon niet eens weet waar ik op moet zoeken, want ik kan het fenomeen geen naam geven.
Alvast bedankt voor de hulp.
We hebben een SQL query en roepen die aan via een classic ASP pagina.
Vervolgens lopen we met een for-lus eerst door de metadata heen van de teruggegeven data (dus alle kolomnamen en -type).
Dit gaat enorm traag. Het zijn +- 900 kolommen (ja, niet efficient, maar dat is nu even niet de discussie) en kan er voor zorgen dat IIS +- 67 seconden staat te stampen op die for-loop. Daarbij op te merken dat de query zelf binnen enkele milliseconden gewoon data teruggeeft. Dus de query an sich is snel, maar de verdere verwerking in ASP code is enorm traag.
Nu is het geval dat we het probleem hebben weten te traceren tot het volgende:
In de SQL query wordt, naast gewone kolommen, ook gebruik gemaakt van SQL Scalar valued functions.
SELECT Col1, Col2, Col3, dbo.Functie1(col4, col5), dbo.Functie2(col6, col7) FROM table inner join blabla....
Halen we de 2 scalar valued functies uit de query, gaat de for-loop weer als een malle.
We weten dus wat het probleem veroorzaakt, maar weten niet hoe het op te lossen, want we hebben geen flauw idee waar we op moeten googlen. Hoe heet dit fenomeen? Het lijkt erop dat wanneer we van het ADO.RecordSet object, de kolom typen en namen ophalen, de applicatie terug gaat naar de database om die info op te halen. Ik was altijd in de veronderstelling dat die metadata reeds in de geretourneerde RecordSet object aanwezig was.
Ik hoop dat iemand mijn probleem omschrijving snapt en me in een juiste richting kan duwen.
ps. Voor het eerst dat ik gewoon niet eens weet waar ik op moet zoeken, want ik kan het fenomeen geen naam geven.
Alvast bedankt voor de hulp.
[ Voor 5% gewijzigd door Sircuri op 12-09-2013 20:15 . Reden: toegevoegd dat de query zelf enorm snel is ]
Signature van nature