Estou tentando entender o impacto no desempenho da seleção de dados em uma exibição, onde uma das colunas em uma exibição é função de outros dados na tabela original.
O cálculo é executado independentemente de a coluna computada estar ou não na lista de colunas selecionadas?
Se eu tivesse uma mesa e a vista declarasse assim
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
Oxalá que multiplicação ser realizada em uma consulta como a abaixo?
select ticker, ddate, price, factor from prices
Existe uma referência que garanta desta forma ou de outra? Eu estava lendo a documentação do sistema de regras no Postgres, mas acho que a resposta realmente está no otimizador, pois nada na documentação do sistema de regras indicava que ele não seria selecionado.
Suspeito que, no caso acima, o cálculo não seja realizado. Alterei a visualização para usar a divisão em vez da multiplicação e inseri um 0
for factor
em price_data
. A consulta acima não falhou, mas se a consulta foi modificada para selecionar a coluna computada, a consulta modificada falhou.
Existe alguma maneira de entender quais cálculos estão sendo feitos quando a select
é realizado? Acho que estou procurando algo parecido, EXPLAIN
mas que também me fale sobre os cálculos que estão sendo executados.