我试图了解从视图中选择数据的性能影响,其中视图中的一列是原始表中其他数据的函数。
无论计算列是否在所选列的列表中,是否都会执行计算?
如果我有一张桌子并且视图像这样声明
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
Run Code Online (Sandbox Code Playgroud)
会是乘法类似下面的查询来执行?
select ticker, ddate, price, factor from prices
Run Code Online (Sandbox Code Playgroud)
是否有参考以一种方式或另一种方式保证这一点?我正在阅读有关 Postgres 规则系统的文档,但我认为答案确实在于优化器,因为规则系统文档中没有任何内容表明它不会被选中。
我怀疑在上述情况下没有执行计算。我将视图更改为使用除法而不是乘法,并将0for插入factor到price_data. 上面的查询没有失败,但如果修改查询以选择计算列,则修改后的查询失败。
有什么方法可以理解在执行 a 时 …