加入收藏 | 设为首页 | 会员中心 | 我要投稿 宁德站长网 (https://www.0593zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2021-04-01 03:31:03 所属栏目:MsSql教程 来源:网络整理
导读:作为DBA有多年的经验,我相信我知道这个问题的答案,但我认为从来没有伤害到我的基础. 假设我有一个表在列A和列B上有一个索引,而在列A,B和C上有一个第二个索引,那么丢弃第一个索引是安全的,因为第二个索引基本上会满足可以从第一个索引中获益的查询? 解决方

作为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)是多余的,也许值得保留.您还需要考虑表的波动性;如果表很少发生变化,额外的指标并不重要;如果表更改很多,额外的索引会减缓对表的修改.这是否重要是难以猜到的?您可能需要进行性能测量.

(编辑:宁德站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读