回答

收藏

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

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

我有多年的DBA经验,但我确实相信我知道该问题的答案,但是我认为检查基础不会有什么坏处。
# {1 p  R; z) T5 @" j使用SQL* Y# ~8 r/ B6 @# b* i& G
Server,假设我有这对列索引的表A和列B,并在列第二指标A,B以及C,那会是安全的,下降的第一指标,作为第二指标基本上都会满足,将受益查询第一个索引?
7 G1 B7 p8 r/ A5 {               
7 o. k* F+ Q# p$ ]" N解决方案:6 I5 J0 I4 G4 m. u
               
, w' N) X# D% a" A1 j$ M% G* L8 Z- p- ^) U+ M. j9 ~) a: e

6 H/ w! @6 r/ Q8 g                这取决于情况,但是答案通常是“是的,您可以删除(A,B)上的索引”。
, \: H3 F; P2 b4 Q9 l) O相反的情况(您不会在(A,B)上删除索引)是在(A,B)上的索引是强制执行约束的唯一索引时;那么您不想删除(A,B)上的索引。(A,B,C)上的索引也可以是唯一的,但是唯一性是多余的,因为(A,B)组合由于其他索引而是唯一的。
6 e* N& z; i; Z; v. J1 U9 r但是在没有这种异常情况的情况下(例如,如果(A,B)和(A,B,C)都允许重复条目),则(A,B)索引在逻辑上是多余的。但是,如果列C为“宽”列(可能是CHAR(100)列),而A和B较小(例如INTEGER),则(A,B)索引比(A,B,C; A! [1 C0 M) y/ t/ m, `
)索引,因为您可以获得在(A,B)索引的每页中读取的更多信息。因此,即使(A,B)是多余的,也可能值得保留。您还需要考虑表格的波动性。如果表很少更改,那么额外的索引就没什么大不了了;如果表变化很大,则额外的索引会减慢对该表的修改。这是否重要,很难猜测。您可能需要进行性能测量。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则