如果A,B,C上有索引,则A,B上的索引是否冗余?
技术问答
380 人阅读
|
0 人回复
|
2023-09-14
|
我有多年的DBA经验,但我确实相信我知道该问题的答案,但是我认为检查基础不会有什么坏处。. v" k2 B) B, w7 H( C
使用SQL
0 z* b l9 Z- W) X! F- WServer,假设我有这对列索引的表A和列B,并在列第二指标A,B以及C,那会是安全的,下降的第一指标,作为第二指标基本上都会满足,将受益查询第一个索引?# g$ J$ u+ |; J- D( W$ _" V" m! I
' F* g. i+ T1 d: ~' c
解决方案:/ [5 K$ ]! X6 n" [' a( \& z
( m; s2 ~* E2 W1 H2 r' s. _# H
, W8 T% h2 M/ }* v8 G0 K% X. h# B) b) M8 W: ^4 A
这取决于情况,但是答案通常是“是的,您可以删除(A,B)上的索引”。
9 R" K! ?; R. V! F. B相反的情况(您不会在(A,B)上删除索引)是在(A,B)上的索引是强制执行约束的唯一索引时;那么您不想删除(A,B)上的索引。(A,B,C)上的索引也可以是唯一的,但是唯一性是多余的,因为(A,B)组合由于其他索引而是唯一的。
4 g7 g b+ F- c; {但是在没有这种异常情况的情况下(例如,如果(A,B)和(A,B,C)都允许重复条目),则(A,B)索引在逻辑上是多余的。但是,如果列C为“宽”列(可能是CHAR(100)列),而A和B较小(例如INTEGER),则(A,B)索引比(A,B,C
$ I) _2 |! n* u' t7 X& ?)索引,因为您可以获得在(A,B)索引的每页中读取的更多信息。因此,即使(A,B)是多余的,也可能值得保留。您还需要考虑表格的波动性。如果表很少更改,那么额外的索引就没什么大不了了;如果表变化很大,则额外的索引会减慢对该表的修改。这是否重要,很难猜测。您可能需要进行性能测量。 |
|
|
|
|
|