Estoy tratando de comprender el impacto en el rendimiento de seleccionar datos de una vista, donde una de las columnas de una vista es función de otros datos en la tabla original.
¿El cálculo se realiza independientemente de si la columna calculada está o no en la lista de columnas seleccionadas?
Si tuviera una mesa y la vista así se declarara
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
¿Se realizaría esa multiplicación en una consulta como la siguiente?
select ticker, ddate, price, factor from prices
¿Hay alguna referencia que garantice de una forma u otra? Estaba leyendo la documentación sobre el sistema de reglas en Postgres, pero creo que la respuesta realmente recae en el optimizador, ya que nada en la documentación del sistema de reglas indicaba que no se seleccionaría.
Sospecho que en el caso anterior no se realiza el cálculo. Cambié la vista para usar la división en lugar de la multiplicación, e inserté un 0
for factor
en price_data
. La consulta anterior no falló, pero si la consulta se modificó para seleccionar la columna calculada, la consulta modificada falló.
¿Hay alguna manera de entender qué cálculos se están haciendo cuando select
se lleva a cabo una? Supongo que estoy buscando algo así, EXPLAIN
pero que también me informa sobre los cálculos que se están realizando.