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

PostgreSQL中复合主键的所有列是否需单独创建索引?

关于PostgreSQL复合主键与单独索引的问题

不需要单独给ID列创建索引,但是否需要给TYPE列单独建索引,取决于你的查询场景:

  • PostgreSQL在创建复合主键(ID,TYPE)时,会自动生成一个同顺序的复合B-tree索引。这个索引完全支持以ID为条件的查询(比如WHERE ID = '123'),因为B-tree索引的前缀列可以被单独用来匹配,所以单独给ID建索引纯属冗余,只会浪费存储空间和增加写入时的索引维护开销。

  • 如果你的业务中有大量仅以TYPE为条件的查询(比如WHERE TYPE = 'novel'),那这个复合索引就派不上用场了——因为TYPE是复合索引的非前缀列,无法单独被高效匹配。这种情况下,你需要给TYPE单独创建一个索引。反之,如果没有这类查询,就没必要多此一举。

举个例子,以下查询能用到自动生成的复合主键索引:

SELECT * FROM BOOK_TYPE WHERE ID = 'b001';
SELECT * FROM BOOK_TYPE WHERE ID = 'b001' AND TYPE = 'history';

而这个查询用不上复合索引,若频繁执行则需要单独建TYPE的索引:

SELECT * FROM BOOK_TYPE WHERE TYPE = 'comic';

内容的提问来源于stack exchange,提问作者Patan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:35:21