【发布时间】:2016-05-17 15:27:33
【问题描述】:
我试图在POSTGRESQL 中加快查询速度。有一个item 表,其中包含price 和vat 列。我想选择价格包含增值税的商品,比如说,x。
SELECT * FROM item WHERE (price*(1+VAT/100.0))>x
EXPLAIN 退回了一些费用 - 大约 8000。
为了让它更快,我创建了一个函数 price_vat(price,vat),它计算相同的东西 (price*(1+VAT/100.0))。当我将(price*(1+VAT/100.0)) 替换为price_vat(price,vat) 时,执行成本略有提高(约9000)。
所以我创建了一个INDEX
CREATE INDEX price_vat_index on item (price_vat(price,vat));
现在,当我运行查询 EXPLAIN SELECT * FROM item WHERE price_vat(price,vat)>x 时,它返回的成本要低得多(大约是原始成本的 66%)。
它是否计算所有行的函数并将它们存储在某个地方?如果是,如果我在某些记录中更改增值税怎么办?每次更改VAT 或PRICE 时,我是否必须创建一个触发器来创建INDEX?
【问题讨论】:
标签: sql database postgresql indexing