比方說,我有一個表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;
兩個查詢,是否有性能差異? 第一個查詢是否受益於這兩個索引?第二個查詢是否受益於這兩個索引?我無法在視圖上創建索引來幫助改善性能,對嗎?如果在兩列上都有索引,如CREATE INDEX ON FOO (STATUS, RATING)
而不是兩個單獨的索引,那麼兩者的性能如何變化?
我明白這個問題可以是一個通用的SQL問題,但是當需要規範時,我想知道它在PostgreSQL中的具體工作方式。