PostgreSQL查询场景:单字段与组合字段的索引选择咨询
索引选择建议:创建复合索引
针对你的两类查询场景,优先选择创建以userId为前缀、abortScript为后缀的复合索引,而非两个单独的索引,原因如下:
复合索引能同时覆盖两种查询需求
- 仅通过
userId查询时,PostgreSQL可高效利用复合索引的前缀列(userId)进行查找,效果和单独创建userId索引几乎无差异——因为复合索引先按userId排序,再按abortScript排序,前缀匹配的查找逻辑完全通顺。 - 同时查询
userId和abortScript时,复合索引可直接匹配整个查询条件,无需合并多个索引的结果,查询效率比使用两个单独索引更高。
- 仅通过
单独索引存在冗余和性能损耗
你没有单独通过abortScript查询的场景,单独创建abortScript索引纯粹浪费存储空间,而且每次对Category表做插入、更新、删除操作时,数据库都要额外维护这个无用的索引,增加写操作的开销。
正确的复合索引创建语句:
CREATE INDEX "Category_userId_abortScript_idx" ON "Category"("userId", "abortScript");
注意:复合索引的列顺序很关键,必须把查询中作为过滤条件的**核心列(这里是必用的userId)**放在前面,否则无法有效覆盖仅查userId的场景。
内容的提问来源于stack exchange,提问作者user566245
相关产品推荐
相关产品推荐

