回答

收藏

如果A,B,C上有索引,则A,B上的索引是否冗余?

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

我有多年的DBA经验,但我确实相信我知道该问题的答案,但是我认为检查基础不会有什么坏处。% v% D, a9 `, q9 _. O
使用SQL$ p! v+ \  G  e9 A1 U
Server,假设我有这对列索引的表A和列B,并在列第二指标A,B以及C,那会是安全的,下降的第一指标,作为第二指标基本上都会满足,将受益查询第一个索引?1 j  X+ d" K+ W
                  J* S9 D: ^3 z) C6 G/ ~& D
解决方案:" _- ~. B- D6 u* t" W
               
, V: d0 j/ ?2 t& }( x3 G7 i! v8 u2 f
' f4 C# a+ B" v
) G/ e9 U, c  V! r! p9 R                这取决于情况,但是答案通常是“是的,您可以删除(A,B)上的索引”。
5 S9 I3 W3 A& e相反的情况(您不会在(A,B)上删除索引)是在(A,B)上的索引是强制执行约束的唯一索引时;那么您不想删除(A,B)上的索引。(A,B,C)上的索引也可以是唯一的,但是唯一性是多余的,因为(A,B)组合由于其他索引而是唯一的。7 \( M& s9 {) G, Z1 E1 ^  x9 c
但是在没有这种异常情况的情况下(例如,如果(A,B)和(A,B,C)都允许重复条目),则(A,B)索引在逻辑上是多余的。但是,如果列C为“宽”列(可能是CHAR(100)列),而A和B较小(例如INTEGER),则(A,B)索引比(A,B,C
5 A  v1 E2 t3 w3 `+ ]% L)索引,因为您可以获得在(A,B)索引的每页中读取的更多信息。因此,即使(A,B)是多余的,也可能值得保留。您还需要考虑表格的波动性。如果表很少更改,那么额外的索引就没什么大不了了;如果表变化很大,则额外的索引会减慢对该表的修改。这是否重要,很难猜测。您可能需要进行性能测量。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则