Я пытаюсь понять влияние на производительность выбора данных из представления, где один из столбцов в представлении является функцией других данных в исходной таблице.
Выполняются ли вычисления независимо от того, находится ли вычисляемый столбец в списке выбранных столбцов?
Если бы у меня был стол и вид объявлен так
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
Будет ли это умножение выполняться в запросе, подобном приведенному ниже?
select ticker, ddate, price, factor from prices
Есть ли ссылка, которая гарантирует это так или иначе? Я читал документацию по системе правил в Postgres, но я думаю, что ответ на самом деле лежит на оптимизаторе, поскольку ничто в документации системы правил не указывало, что он не будет выбран.
Я подозреваю, что в приведенном выше случае вычисления не выполняются. Я изменил взгляд на использование деление вместо умножения и вставил 0
на factor
в price_data
. Приведенный выше запрос не дал сбоя, но если запрос был изменен для выбора вычисляемого столбца, измененный запрос не выполнен.
Есть ли способ понять, какие вычисления выполняются, когда select
выполняется? Я думаю, что я ищу что-то вроде, EXPLAIN
но это также говорит мне о вычислениях, которые выполняются.