Ich stecke gerade in einem kleinen Projekt fest, weil ich überlege, wie ich die Abfragen für unsere monatlichen Berichte besser strukturieren kann. Im Moment ziehe ich die Daten mit mehreren einzelnen Queries, was sich langsam und umständlich anfühlt. Ich habe gehört, dass man mit einer Common Table Expression komplexe Logik vielleicht übersichtlicher bündeln kann, aber ich bin mir nicht sicher, ob das für mein Szenario wirklich der richtige Weg ist. Irgendwie habe ich das Gefühl, dass meine aktuelle Herangehensweise die Datenbank unnötig belastet.
Ich verstehe den Frust mit vielen einzelnen Abfragen. Wenn der Kopf schon beim ersten Blick auf eine neue Monatsstatistik schwirrt wirkt eine einzige strukturierte Abfrage oft verlockend. Ob das Common Table Expression genannt wird oder einfach eine lesbare Form der Verschachtelung ist, am Ende zählt ob es die Wartung erleichtert.
Eine echte Chance besteht darin dass eine CTE komplexe Logik auslagert und die Abfrage lesbarer macht. Die Gefahr ist jedoch dass der Plan nicht besser wird sondern auf dem Papier gut aussieht und in der Praxis langsamer bleibt. Wer sie sinnvoll nutzt kann Redundanz vermeiden und Klarheit gewinnen doch die Performance bleibt oft unklar und hängt von der Datenbank ab.
Vielleicht denkt man dass der Aufwand sich von selbst bezahlt macht weil weniger Code zu warten ist. Allerdings kann eine zu lange Kette von CTEs genauso verwirrend wirken wie verschachtelte Unterabfragen. Es kann sinnvoll sein statt einer langen Kette über Materialisierung oder Zwischenspeicher nachzudenken.
Eine andere Lesart kommt von jemandem der Schreibstil bevorzugt statt technischer Tiefenanalyse. Er sagt erst mal eine einfache Abfrage und danach eine komplexe Schicht aufbauen. Glaubst du dass das wirklich klappt?
Manchmal lohnt es sich die Idee zu wechseln und die Monatsberichte als Aufgabe zu sehen die Abfragen auf verschiedene Quellen zu verteilen damit jeder Teil der Berichte seine eigene Quelle hat. Eine Alternative sind materialisierte Sichten oder pre aggregation die die Daten bereits vor der Berichtszeit berechnen. Das verschiebt die Last besser.
Am Ende bleibt offen ob die strukturierte Form wirklich die beste Lösung ist oder ob sie nur anders klingt. Vielleicht ist die wahre Frage wie viel man denken will bevor man die maschine fragt und welche Rolle der mensch im datenfluss hat.