回答

收藏

同一表的同一列上有2个PostgreSQL索引-冗余吗?

技术问答 技术问答 168 人阅读 | 0 人回复 | 2023-09-14

我有一个带有2个索引的PostgreSQL表。索引之一是涵盖website_id和tweet_id列,并且是唯一的B树索引。第二索引仅覆盖该website_id列,并且是非唯一索引。
$ Z; s  l  h5 w# p如果第一个索引存在,那么第二个索引是否冗余?换句话说,拥有第二个索引会没有好处吗?
' J8 c) m6 R. P- h4 A* u                6 o0 d0 L- e6 X
解决方案:$ u' t5 u- P+ X$ t5 V6 W
                5 Y( Q0 L7 B! n$ l, m
; p! a$ F; b& X# E

# j, ~1 N; ~5 z8 U                postgres多列索引只能用于搜索第一列,因此在实践中是多余的。
' n4 n4 K/ X" S3 b" C1 x& z. q' w- i. i* H7 G# p) W
可以将多列B树索引用于涉及该索引列的任何子集的查询条件,但是当前导(最左边)列受到约束时,该索引效率最高。确切的规则是,将使用前导列上的相等约束以及第一列上没有相等约束的任何不相等约束来限制扫描的索引部分。
/ ~5 [' E, H9 H0 P7 y0 v; G+ i& K7 a( H' h, e& C  L2 o
Postgres 9.2文档
9 R7 ]% a4 j$ L( Z' c1 f5 \) x' e在遥远的情况下,其他索引可能会有用(请参阅下文以获取更多详细信息),即。如果您对第一个索引进行大多数查询,并且对索引有很小的缓存。在这种情况下,组合索引可能不适合高速缓存,但较小的单列将适合。
0 m. v% I8 x/ A1 v1 u! uhttps://dba.stackexchange.com/questions/27481/is-a-composite-index-also-good-1 b2 b+ u/ P' b. q7 _
for-queries-on-the-first-
' q; j& r: r( y* i) R7 ], Dfield/27493#27493
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则