Sto cercando di comprendere l'impatto delle prestazioni della selezione dei dati da una vista, in cui una delle colonne in una vista è funzione di altri dati nella tabella originale.
Il calcolo viene eseguito indipendentemente dal fatto che la colonna calcolata sia o meno nell'elenco delle colonne selezionate?
Se avessi un tavolo e la vista dichiarasse così
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
Sarebbe che la moltiplicazione essere eseguita in una query come quella qui sotto?
select ticker, ddate, price, factor from prices
C'è un riferimento che garantisce questo in un modo o nell'altro? Stavo leggendo la documentazione sul sistema di regole in Postgres, ma penso che la risposta sia proprio dell'ottimizzatore, dal momento che nulla nella documentazione del sistema di regole indicava che non sarebbe stato selezionato.
Sospetto nel caso precedente che il calcolo non sia eseguito. Ho cambiato la vista per usare la divisione invece della moltiplicazione e ho inserito un 0
for factor
in price_data
. La query sopra non è fallita, ma se la query è stata modificata per selezionare la colonna calcolata, la query modificata non è riuscita.
Esiste un modo per capire quali calcoli vengono eseguiti quando select
viene eseguita una? Immagino che sto cercando qualcosa di simile, EXPLAIN
ma che mi dice anche del calcolo (s) che vengono eseguiti.