回答

收藏

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

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

我有多年的DBA经验,但我确实相信我知道该问题的答案,但是我认为检查基础不会有什么坏处。2 |2 A3 V* S* x4 d. e7 e" F
使用SQL
4 q6 h' X! B- U# `0 [- i, pServer,假设我有这对列索引的表A和列B,并在列第二指标A,B以及C,那会是安全的,下降的第一指标,作为第二指标基本上都会满足,将受益查询第一个索引?
# ?4 X, M1 G8 n& v2 D7 K4 v; e               
) Y  F- }# Y6 S( r+ ]+ d* {解决方案:
! h% m& F) e" a7 G! Z                  f' }) i  a! `" F3 `
/ C+ p, h& t6 v; c- m6 D
$ }, j& v/ v3 B5 E- P
                这取决于情况,但是答案通常是“是的,您可以删除(A,B)上的索引”。8 B  A% M- ^7 r. ?* n5 }4 p" O
相反的情况(您不会在(A,B)上删除索引)是在(A,B)上的索引是强制执行约束的唯一索引时;那么您不想删除(A,B)上的索引。(A,B,C)上的索引也可以是唯一的,但是唯一性是多余的,因为(A,B)组合由于其他索引而是唯一的。
2 G- H3 V8 h2 ]. `8 I但是在没有这种异常情况的情况下(例如,如果(A,B)和(A,B,C)都允许重复条目),则(A,B)索引在逻辑上是多余的。但是,如果列C为“宽”列(可能是CHAR(100)列),而A和B较小(例如INTEGER),则(A,B)索引比(A,B,C
# n: |( s' e6 b! T)索引,因为您可以获得在(A,B)索引的每页中读取的更多信息。因此,即使(A,B)是多余的,也可能值得保留。您还需要考虑表格的波动性。如果表很少更改,那么额外的索引就没什么大不了了;如果表变化很大,则额外的索引会减慢对该表的修改。这是否重要,很难猜测。您可能需要进行性能测量。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则