私は仕事でプロジェクトに取り組んできましたが、クエリのWHERE句のいくつかで関数を呼び出さなければならないことに気づきました。パフォーマンスはそれほどひどいものではありませんが、改善したいと思います。だから私はそれを述べたインデックスのドキュメントを見ました:
インデックスフィールドは、テーブル行の1つ以上の列の値から計算された式にすることができます。
素晴らしい。そこで、インデックスを作成してみました。
CREATE INDEX idx_foo ON foo_table (stable_function(foo_column));
そしてエラーを受け取りました:
エラー:インデックス式の関数はIMMUTABLEとマークする必要があります
それで私は安定したボラティリティについてこう言っている関数ボラティリティカテゴリーについて読みました:
特に、このような関数を含む式をインデックススキャン条件で使用するのが安全です。
「インデックススキャン条件」という言い回しからすると、実際のインデックスを意味するものではないと思います。それで、それはどういう意味ですか?インデックスで安定した関数を利用することは可能ですか?それとも、ずっと進んで、これが不変の関数として機能することを確認する必要がありますか?
Postgresv9.0.1を使用しています。