我試圖讓我的查詢更快在POSTGRESQL
。有一個item
表,其中列price
和vat
。我想選擇價格高於的商品,比如說,x
。函數索引如何使查詢更快?
SELECT * FROM item WHERE (price*(1+VAT/100.0))>x
EXPLAIN
返回一定的成本 - 約8000
爲了使其更快,我創建了一個功能price_vat(價格,增值稅),該計算同樣的事情(價格×(1+增值稅/ 100.0 ))。當我用price_vat(price,vat)
代替(price*(1+VAT/100.0))
時,執行成本略有提高(約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,該怎麼辦?我必須創建一個觸發器,它每次創建INDEX
VAT
或PRICE
被更改?