sql – 如果A,B,C上有一个索引,A,B上的索引是否冗余?

前端之家收集整理的这篇文章主要介绍了sql – 如果A,B,C上有一个索引,A,B上的索引是否冗余?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
作为DBA有多年的经验,我相信我知道这个问题的答案,但我认为从来没有伤害到我的基础.

假设我有一个表在列A和列B上有一个索引,而在列A,B和C上有一个第二个索引,那么丢弃第一个索引是安全的,因为第二个索引基本上会满足可以从第一个索引中获益的查询

解决方法

这取决于,但答案通常是“是的,你可以把索引放在(A,B)’上.

在(A,B)上的索引对应的情况下(A,B)上的索引是执行约束的唯一索引;那么你不想将索引放在(A,B)上. (A,B,C)的索引也可以是唯一的,但唯一性是多余的,因为(A,B)组合是唯一的,因为其他索引.

但是在没有这种不寻常的情况下(例如,如果(A,B)和(A,C)都允许重复输入),则(A,B)索引在逻辑上是冗余的.然而,如果列C可能是“宽”(CHAR(100)列),而A和B较小(称为INTEGER),那么(A,B)索引比(A,C)更有效)索引,因为您可以获取(A,B)索引每页读取更多信息.所以,即使(A,B)是多余的,也许值得保留.您还需要考虑表的波动性;如果表很少发生变化,额外的指标并不重要;如果表更改很多,额外的索引会减缓对表的修改.这是否重要是难以猜到的?您可能需要进行性能测量.

原文链接:https://www.f2er.com/mssql/79756.html

猜你在找的MsSQL相关文章