同一列的两个索引并更改顺序

问题描述 投票:1回答:2

我在Microsoft SQL Server 2008中有一个大表。它有两个索引。一个索引具有列A降序,另一个索引具有列A以其他列升序。

我的申请如下:

  1. 选择记录。
  2. 如果没有记录则插入
  3. 如果找到则更新记录

请注意,此表包含数百万条记录。

问题是:这些索引是否会影响任何选择/插入/更新性能?

有什么建议?

sql performance indexing sql-server-2008-r2
2个回答
0
投票

具有完全相同的两个索引,唯一的区别是排序将对SQL引擎没有任何影响,并且只选择(实际)。

想象一下你有2个英语词典,一个从A到Z的单词,另一个从Z到A.你需要搜索特定单词的努力在两种情况下大致相同。

如果您有2个人的数据列表,一个按名字和姓氏排序,另一个按姓氏排序,然后是名字,则会出现另一种情况。如果你不得不寻找“John Doe”,那么首先按姓氏排序的那个与另一个相比几乎没用。

这些示例是SQL Server上索引的非常简化的表示。索引将它们的数据存储在称为B树的结构中,但是出于搜索目的,这些示例用于理解索引何时有用。

恢复:您可以删除第一个索引并保留其中包含其他列的索引,因为它可用于更多不同的方案以及所有需要另一个索引的情况。保留一个无用的索引会带来额外的维护任务,例如在每次插入,更新,删除和刷新统计信息时保持索引更新,因此您可能希望删除它。

PD:对于使用的第二个索引,这在很大程度上取决于您用于访问该特定表的查询,它是连接和where子句。您可以使用突出显示SSMS上的查询的“显示估计执行计划”来查看引擎对每个对象的访问计划以执行操作。如果使用索引,您将在那里看到它。


0
投票

感谢所有的答案。我探索了SQL Server的SQL Server Profiler和SQL Tuning Advisor,并运行它们以获取推荐的索引。它建议使用包含选项的单个索引。我使用了索引并且性能得到了提升。

© www.soinside.com 2019 - 2024. All rights reserved.