Ich habe eine Abfrage wie folgt:
SELECT SUM(`weight`) as totalgrams,
SUM(`weight`)/1000 as totalkilograms
FROM `item`
für die ich das Ergebnis der ersten Spalte SUM
verwenden muss, aber da ich totalgrams
nicht verwenden kann, muss ich die SUM
-Funktion erneut bei der Berechnung der zweiten Spalte verwenden.
Der Abfrageplan von EXPLAIN
:
Jetzt mit der zweiten Abfrage:
SELECT totalgrams, totalgrams/1000 as totalkilograms
FROM (SELECT SUM(`weight`) as totalgrams
FROM `item`) prequery
Ich muss die SUM
nicht wiederholen, aber ich lande mit einer verschachtelten Abfrage.
Der Abfrageplan von EXPLAIN
:
Auf den ersten Blick scheint es besser zu sein, die erste Abfrage zu verwenden, da sie nur einen Eintrag im Ausführungsplan hat, aber wurde hier SUM
zweimal berechnet (was überflüssig und nicht skalierbar ist)?
Oder hat das System bereits eine Optimierung dafür und berechnet es nur einmal; ist also tatsächlich die erste Abfrage besser?
Aktuell befinden sich nur wenige Zeilen in der Tabelle, daher ist der Unterschied wahrscheinlich nicht signifikant in der realen [ms]-Einheit.
Aber falls es später riesig wird, frage ich mich tatsächlich, welche Abfrage besser wäre?
Und gilt das für alle DBMS?
Es dient ausschließlich dem Verständnis des SQL-Workflows, jeder Einblick ist willkommen.