我有一张这样的table:
CREATE TABLE shop_webhooks_logs (
id UUID NOT NULL PRIMARY KEY,
shop_id UUID not null REFERENCES shop(id),
topic VARCHAR,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
)
字符串
我的querie会是这样的:
SELECT id, shop_id FROM shop_webhook_logs WHERE id = $1 AND shop_id = $2
型
所以我的where语句有两个select,那么我应该像这样在shop_id上创建另一个索引吗?
CREATE INDEX I_WEBHOOK_LOGS ON shop_webhook_logs(shop_id)
型
1条答案
按热度按时间e7arh2l61#
如果在
WHERE
子句中有两个条件与AND
链接,则每个结果行必须满足这两个条件。这意味着如果最多有一个表行满足第一个条件,并且您有该条件的索引,则查询执行已经非常高效。这就是这里的情况:因为
id
是主键,所以在该列上自动有一个唯一的索引,所以扫描该索引将最多返回一行。所以不需要索引其他条件; PostgreSQL将应用一个额外的过滤器,如果需要,可以删除索引扫描找到的行。