sql – 如果A,B,C上有一个索引,A,B上的索引是否冗余?
发布时间:2020-12-12 06:13:13 所属栏目: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)是多余的,也许值得保留.您还需要考虑表的波动性;如果表很少发生变化,额外的指标并不重要;如果表更改很多,额外的索引会减缓对表的修改.这是否重要是难以猜到的?您可能需要进行性能测量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 在ASP.NET中连接SQL Server的简单方法
- 如何INSERT到名称为sql关键字的列
- sql-server – 在哪里可以找到用于学习的数据库调优练习?
- SQL Server SQL 新增/修改 表字段列的类型等
- php mysql访问数据库的步骤详解
- sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取
- SQLServer 2005&08镜像导致日志文件LDF过大的问题解决
- sql-server – SQL Server:set character set(not collat?
- 在sqlserver中使用事务的注意事项
- sql-server – 如何从sql server表中查看已删除的记录?