POSTGRESQL
でクエリを高速化しようとしていました。列price
とvat
を持つitem
テーブルがあります。私は価格が含まれているアイテムを選択したいと考えています。関数のインデックスはどのようにクエリを高速化しますか?
SELECT * FROM item WHERE (price*(1+VAT/100.0))>x
EXPLAIN
は、いくつかのコストを返さ - およそ8000
それはより速く作るために、私は同じこと(価格*(1つの+ VAT/100.0を計算する関数のprice_vat(価格、バットを)作成しました))。私が(price*(1+VAT/100.0))
をprice_vat(price,vat)
に置き換えたとき、実行コストはわずかに上がった(約9000)。
だから、私は、クエリEXPLAIN SELECT * FROM item WHERE price_vat(price,vat)>x
を実行すると、それははるかに低コスト(元の約66%)を返し、今INDEX
CREATE INDEX price_vat_index on item (price_vat(price,vat));
を作成しました。
すべての行の関数を計算し、どこかに格納しますか?はいの場合、一部のレコードでVATを変更するとどうなりますか? VAT
またはPRICE
が変更されるたびにINDEX
を作成するトリガーを作成する必要がありますか?