我在Microsoft SQL Server 2008中有一个大表。它有两个索引。一个索引具有列A降序,另一个索引具有列A以其他列升序。
我的申请如下:
请注意,此表包含数百万条记录。
问题是:这些索引是否会影响任何选择/插入/更新性能?
有什么建议?
具有完全相同的两个索引,唯一的区别是排序将对SQL引擎没有任何影响,并且只选择(实际)。
想象一下你有2个英语词典,一个从A到Z的单词,另一个从Z到A.你需要搜索特定单词的努力在两种情况下大致相同。
如果您有2个人的数据列表,一个按名字和姓氏排序,另一个按姓氏排序,然后是名字,则会出现另一种情况。如果你不得不寻找“John Doe”,那么首先按姓氏排序的那个与另一个相比几乎没用。
这些示例是SQL Server上索引的非常简化的表示。索引将它们的数据存储在称为B树的结构中,但是出于搜索目的,这些示例用于理解索引何时有用。
恢复:您可以删除第一个索引并保留其中包含其他列的索引,因为它可用于更多不同的方案以及所有需要另一个索引的情况。保留一个无用的索引会带来额外的维护任务,例如在每次插入,更新,删除和刷新统计信息时保持索引更新,因此您可能希望删除它。
PD:对于使用的第二个索引,这在很大程度上取决于您用于访问该特定表的查询,它是连接和where子句。您可以使用突出显示SSMS上的查询的“显示估计执行计划”来查看引擎对每个对象的访问计划以执行操作。如果使用索引,您将在那里看到它。
感谢所有的答案。我探索了SQL Server的SQL Server Profiler和SQL Tuning Advisor,并运行它们以获取推荐的索引。它建议使用包含选项的单个索引。我使用了索引并且性能得到了提升。