Back in Blog!
Nach einiger Zeit der Blog-Abstinenz melde ich mich nun wieder zu Wort…
Einige werden sich sicherlich Fragen, warum ich eine mehrwöchige Schreibpause
eingelegt habe – nun – ich war nach einer Gehirnwäsche eine Zeit lang
Oberpostvorsteher
in einem kleinen Dorf und… ach nein, lassen wir das… zum Thema!:-)
Ich hatte sehr oft Aufträge à la "kannst Du das mal eben
schneller machen?"
und bin dabei häufig auf eine Programmiermethode gestoßen, die gerne
z.B. zum Darstellen von Artikelübersichten in Shops genutzt wird:
<cfquery name="getItems" datasource="shopDB"> select itemID, itemName from items where group = #url.group# </cfquery> <cfoutput query="getItems"> <cfquery name="getDetails" datasource="shopDB"> select onStock, whatEver from items where condition = true and itemID = #getitems.itemID# </cfquery> We currently have #getDetails.onStock# x #getItems.itemName# on stock.<br> </cfoutput>
Das Prinzip ist hierbei, dass eine Hauptquery die Loop-Basis bildet und in
der Loop dann weitere Details geholt werden. Sicherlich werden viele
das Prinzip wiedererkennen. Okay, der Code ist relativ sinnfrei, es geht
mir hier aber lediglich um’s Prinzip. 🙂
Um hier mit relativ wenig Aufwand eine deutliche Steigerung der Performance
zu erreichen, kann man die erste Abfrage sozusagen als BaseQuery definieren
und weitere Abfragen mittels QoQ gegen dieses Queryset laufen lassen.
Somit ist die Datenbank entlastet:
<cfquery name="itemBase" datasource="shopDB"> select itemID, itemName, [...] from items where group = #url.group# </cfquery> <cfoutput query="getItems"> <cfquery name="getDetails" dbtype="query"> select onStock, whatEver from itemBase where condition = true and itemID = #getitems.itemID# </cfquery> We currently have #getDetails.onStock# x #getItems.itemName# on stock.<br> </cfoutput>
Alle Queries innerhalb der Schleife holen sich ihre Daten nun aus dem RAM.
Dieser Tip ist z.B. für diejenigen interessant, die mit CF und Access
arbeiten (müssen). Access ist irgendwann am Ende seiner Kräfte,
daher sollte man’s entlasten, wo nur eben möglich.
Comments on this entry are closed.