拥有多年的 DBA 经验,我确实相信我知道问题的答案,但我认为检查一下我的基础总没有坏处。
使用 SQL Server,假设我有一个在列上有索引的表A
和列B
,以及列上的第二个索引A
, B
, and C
,删除第一个索引是否安全,因为第二个索引基本上可以满足从第一个索引中受益的查询?
这取决于情况,但答案通常是“是的,您可以将索引放在 (A,B) 上”。
反情况(您不会删除 (A,B) 上的索引)是当 (A,B) 上的索引是强制执行约束的唯一索引时;那么您不想删除 (A,B) 上的索引。 (A,B,C) 上的索引也可以是唯一的,但唯一性是多余的,因为 (A,B) 组合由于另一个索引而唯一。
但在没有这种异常情况的情况下(例如,如果 (A,B) 和 (A,B,C) 都允许重复条目),则 (A,B) 索引在逻辑上是冗余的。但是,如果列 C 是“宽”的(可能是 CHAR(100) 列),而 A 和 B 很小(例如 INTEGER),则 (A,B) 索引比 (A,B,C ) 索引,因为您可以从 (A,B) 索引的每页读取更多信息。因此,尽管 (A,B) 是多余的,但它可能值得保留。您还需要考虑表格的波动性;如果表很少改变,额外的索引就没有多大关系;如果表变化很大,额外的索引会减慢对表的修改。这是否重要很难猜测。您可能需要进行性能测量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)