我正在调整sql Server 2008数据库的性能,并使用各种DMV的输出来识别缺失的索引,未被使用的索引等.
我主要使用这3个依赖sql Server提供的DMV数据的脚本(来自sqlServerCentral.com):
The Ultimate Missing Index Finder
The Ultimate Duplicate Index Finder
The Ultimate Index Usage Reporter
当我尝试创建新的索引时,我知道我需要很聪明,并尝试将许多建议分组到尽可能少的索引中,通过创建新的索引来创建它们,以便他们可以做一个合适的工作来提供一些不同的查询为每个查询创建一个单独的索引,当唯一的区别可能是包含的列等.
所以我想得到社区的想法,看看人们是否可以回答有关阅读DMV结果和构建新索引的几个问题.
索引中包含的列的顺序是否重要?
采取以下两个索引建议.你会做什么来尝试使1适合两者?
object_name equality_columns inequality_columns included_columns Appointment [FranchiseId],[AppointmentTypeId] [CustomerId],[ApptDateTime] NULL Appointment [FranchiseId],[AppointmentTypeId] [ApptDateTime] [CustomerId]
如果我有很多索引建议具有相同的平等和不等式字段但不同的包含字段,最好是包含更多的字段或更少的包含字段?再次,目标是创建1索引与3(如果3具有不同的列).
最后,如果有任何好的资源可以为这样的事情提供良好的经验法则或一般准则,如果可以提供这些链接,我将不胜感激.
解决方法
订购索引列的事宜,但不包括列.这是因为只有键列用于查找.
大部分文档必须“阅读”,但这正是他们在this BOL article中所暗示的
This discussion有点更明确,说顺序不重要.
很多唯一关心的是索引中包含的列是空格 – 如果包含大量的列或非常大的列,索引可能会变得非常大.但是这意味着你绝对不想做两个单独的索引,每个索引具有相同的键列,但是包含不同的索引.那么你只是复合你的空间问题.