私がテーブルfooを持っているとしましょう:
CREATE TABLE FOO (
FOO_ID INTEGER,
STATUS INTEGER,
RATING INTEGER,
PRIMARY KEY ("FOO_ID")
)
ここで、ステータスは0から5の間であり、テーブルは行で埋められます。
次に、ステータスにインデックスを作成し、評価に別のインデックスを作成するとします。
CREATE INDEX ON FOO (STATUS);
CREATE INDEX ON FOO (RATING);
さて、私が見解を持っているとしましょう:
CREATE VIEW FOO_THREE_VIEW AS
SELECT *
FROM FOO
WHERE STATUS = 3;
fooのレコードを取得したい:STATUS = 3
とRATING = 5
。次のクエリは、私が望む結果を私に与えるでしょう:
SELECT * FROM FOO WHERE STATUS = 3 AND RATING = 5;
しかし、次のクエリでも、必要な結果が得られます。
SELECT * FROM FOO_THREE_VIEW WHERE RATING = 5;
2つのクエリのうち、パフォーマンスに違いはありますか?最初のクエリは両方のインデックスの恩恵を受けていますか?2番目のクエリは両方のインデックスの恩恵を受けていますか?ビューにインデックスを作成してパフォーマンスを向上させることはできませんよね?CREATE INDEX ON FOO (STATUS, RATING)
2つの別々のインデックスの代わりに、両方の列にインデックスがある場合、2つのパフォーマンスはどのように変化しますか?
質問は一般的なSQLの質問になる可能性があることは理解していますが、仕様が必要な場合は、PostgreSQLで具体的にどのように機能するかを知りたいと思います。