You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL:shop_webhooks_logs表多条件查询的索引设置咨询

是否需要为shop_id创建单独索引?

表结构

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
);

查询语句

SELECT id, shop_id FROM shop_webhook_logs WHERE id = $1 AND shop_id = $2;

问题

由于WHERE子句包含两个查询条件,是否需要为shop_id创建如下单独索引?

CREATE INDEX I_WEBHOOK_LOGS ON shop_webhook_logs(shop_id);

回答

完全不需要为当前查询创建这个单独的shop_id索引,原因如下:

  • id是主键,数据库会自动为主键创建唯一索引。执行WHERE id = $1 AND shop_id = $2时,数据库会通过主键索引直接定位到唯一的一行数据,之后只需校验该行的shop_id是否匹配$2即可,全程用不到单独的shop_id索引。
  • 单独创建shop_id索引不仅对这个查询没有性能提升,反而会增加数据写入(插入、删除、更新)时的索引维护开销,拖慢写操作效率。

如果后续有仅以shop_id为过滤条件的查询(比如SELECT * FROM shop_webhooks_logs WHERE shop_id = $1),这个索引才有存在的价值,但针对当前给出的查询场景,完全没必要创建它。


内容的提问来源于stack exchange,提问作者Ömer Ok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:06:08