Ich versuche, die Auswirkungen der Auswahl von Daten aus einer Ansicht auf die Leistung zu verstehen, wobei eine der Spalten in einer Ansicht von anderen Daten in der Originaltabelle abhängt.
Wird die Berechnung unabhängig davon durchgeführt, ob sich die berechnete Spalte in der Liste der ausgewählten Spalten befindet oder nicht?
Wenn ich einen Tisch hätte und die Ansicht so deklariert wäre
CREATE TABLE price_data (
ticker text, -- Ticker of the stock
ddate date, -- Date for this price
price float8, -- Closing price on this date
factor float8 -- Factor to convert this price to USD
);
CREATE VIEW prices AS
SELECT ticker,
ddate,
price,
factor,
price * factor as price_usd
FROM price_data
Würde diese Multiplikation in einer Abfrage wie der folgenden durchgeführt?
select ticker, ddate, price, factor from prices
Gibt es eine Referenz, die dies auf die eine oder andere Weise garantiert? Ich habe die Dokumentation zum Regelsystem in Postgres gelesen, aber ich denke, die Antwort liegt wirklich beim Optimierer, da nichts in der Dokumentation zum Regelsystem darauf hinweist, dass es nicht ausgewählt werden würde.
Ich vermute im obigen Fall, dass die Berechnung nicht durchgeführt wird. Ich habe die Ansicht geändert, um Division anstelle von Multiplikation zu verwenden, und ein 0
for factor
in eingefügt price_data
. Die obige Abfrage ist nicht fehlgeschlagen. Wenn die Abfrage jedoch geändert wurde, um die berechnete Spalte auszuwählen, ist die geänderte Abfrage fehlgeschlagen.
Gibt es eine Möglichkeit zu verstehen, welche Berechnungen durchgeführt werden, wenn a select
ausgeführt wird? Ich schätze, ich suche nach etwas Ähnlichem EXPLAIN
, das mir aber auch Auskunft über die durchgeführten Berechnungen gibt.