Die Lösung des gordischen Knotens: T-SQL objektorientiert UND schnell

Pro­gram­mie­rern aus der Welt der objekt­ori­en­tier­ten oder pro­ze­du­ra­len Spra­chen dürf­te es beim Blick in so man­che Micro­soft-SQL-Daten­bank die Haa­re zu Ber­ge ste­hen las­sen. Die glei­che Pro­gramm­lo­gik wird häu­fig immer und immer wie­der geschrie­ben und dies an ver­schie­dens­ten Stel­len in der Daten­bank. Das ist umso erstaun­li­cher, weil es bereits seit der SQL-Ser­ver-Ver­si­on 2005 soge­nann­te benut­zer­de­fi­nier­te Funk­tio­nen gibt, die genau dies ver­hin­dern sol­len. War­um also wer­den die­se nicht ver­wen­det? Die Ursa­che ist ihre teil­wei­se kata­stro­pha­le Per­for­mance. Nutzt man die­se Ska­lar­wert­funk­tio­nen zur Zen­tra­li­sie­rung des Quell­codes muss man wohl oder übel ein schlech­tes Lauf­zeit­ver­hal­ten in Kauf neh­men. Von daher hat man die Wahl zwi­schen Pest oder Cho­le­ra – sau­be­re Archi­tek­tur oder gute Per­for­mance.
Zum Glück ist aber auch die Daten­bank­welt nicht ganz so schlecht wie es auf den ers­ten Blick scheint. Mit ein paar weni­gen Hand­grif­fen kann man tat­säch­lich den Quell­code zen­tra­li­sie­ren und das bei sehr gutem Lauf­zeit­ver­hal­ten. Wie das geht? Ein­fach wei­ter­le­sen… wei­ter­le­sen…

ParentChild-Tabellen flachklopfen’ – Cross Apply

In die­sem Bei­trag stel­le ich Ihnen die Ver­wen­dung von CROSS und OUTER APPLY vor. Seit SQL Ser­ver 2005 exis­tiert der App­ly Ope­ra­tor und ist in der Tat eine tol­le Erwei­te­rung in T-SQL.
Soll­ten Sie die Hil­fe von SQL Ser­ver zur Rate zie­hen, wird es im ers­ten Blick nicht ganz deut­lich, was der App­ly Ope­ra­tor denn wirk­lich für einen Vor­teil bringt. Dort heißt es wört­lich:
Der APP­LY-Ope­ra­tor ermög­licht Ihnen das Auf­ru­fen einer Tabel­len­wert­funk­ti­on für sämt­li­che Zei­len, die von einem äuße­ren Aus­druck einer Tabel­le einer Abfra­ge zurück­ge­ge­ben wer­den. Die Tabel­len­wert­funk­ti­on dient als rech­te Ein­ga­be, der äuße­re /Ausdruck der Tabel­le agiert als lin­ke Ein­ga­be. Die rech­te Ein­ga­be wird für jede Zei­le aus der lin­ken Ein­ga­be aus­ge­wer­tet, und die erstell­ten Zei­len wer­den für die end­gül­ti­ge Aus­ga­be kom­bi­niert. Bei der Lis­te der vom APP­LY-Ope­ra­tor erstell­ten Spal­ten han­delt es sich um den Satz von Spal­ten in der lin­ken Ein­ga­be, gefolgt von der Lis­te der von der rech­ten Ein­ga­be zurück­ge­ge­be­nen Spal­ten.”
In die­ser Ver­öf­fent­li­chung stel­le ich Ihnen einer der Mög­lich­kei­ten der Nut­zung von APPLY vor und zwar in mei­nen Augen das meist­be­nutz­te Sze­na­ri­um. wei­ter­le­sen…