假设我有一张桌子 foo:
CREATE TABLE FOO (
FOO_ID INTEGER,
STATUS INTEGER,
RATING INTEGER,
PRIMARY KEY ("FOO_ID")
)
其中 status 可以在 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 中是如何工作的。