回答

收藏

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

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

我有多年的DBA经验,但我确实相信我知道该问题的答案,但是我认为检查基础不会有什么坏处。8 w" C6 `4 g0 `. X2 K, x
使用SQL
/ k0 n& i' t8 K3 eServer,假设我有这对列索引的表A和列B,并在列第二指标A,B以及C,那会是安全的,下降的第一指标,作为第二指标基本上都会满足,将受益查询第一个索引?! a4 T$ s5 t) w, }
               
4 y. I( ~0 U( F0 z& L) f' ?解决方案:
# B8 W/ I  M( K               
2 h9 @7 H+ n* \; i; ~1 d6 v
% B( }2 ?) _5 T+ B* j" ~5 P& J6 A/ T
                这取决于情况,但是答案通常是“是的,您可以删除(A,B)上的索引”。
- Q+ z, |* B2 s& J0 g相反的情况(您不会在(A,B)上删除索引)是在(A,B)上的索引是强制执行约束的唯一索引时;那么您不想删除(A,B)上的索引。(A,B,C)上的索引也可以是唯一的,但是唯一性是多余的,因为(A,B)组合由于其他索引而是唯一的。9 l& }3 V! N& C; a& L# c
但是在没有这种异常情况的情况下(例如,如果(A,B)和(A,B,C)都允许重复条目),则(A,B)索引在逻辑上是多余的。但是,如果列C为“宽”列(可能是CHAR(100)列),而A和B较小(例如INTEGER),则(A,B)索引比(A,B,C- F; M8 D) D% W# N% D& Y
)索引,因为您可以获得在(A,B)索引的每页中读取的更多信息。因此,即使(A,B)是多余的,也可能值得保留。您还需要考虑表格的波动性。如果表很少更改,那么额外的索引就没什么大不了了;如果表变化很大,则额外的索引会减慢对该表的修改。这是否重要,很难猜测。您可能需要进行性能测量。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则