关于缺少索引的SQL Server索引创建的思考

Don*_*Don 12 sql indexing performance sql-server-2008

我正在进行性能调优我的SQL Server 2008数据库,并使用各种DMV的输出来识别缺失的索引,未使用的索引等.

我主要使用依赖于SQL Server提供的DMV数据的这3个脚本(来自SQLServerCentral.com):

终极缺失的索引查找器

终极重复索引查找器

终极指数使用记者

在尝试创建新索引时,我知道我需要聪明并尝试将许多建议组合成尽可能少的索引,方法是将它们设置得恰到好处,以便他们能够在提供一些不同的查询时做得不错.当唯一的差异可能是包含的列等时,为每个查询创建单独的索引.

所以我想了解社区的想法,看看人们是否可以回答一些关于阅读DMV结果和构建新索引的问题.

索引中包含列的顺序是否重要?

采取以下两个指数建议.你会做些什么试图让1适合两者?

object_name equality_columns                    inequality_columns              included_columns
    Appointment [FranchiseId], [AppointmentTypeId]  [CustomerId], [ApptDateTime]    NULL
    Appointment [FranchiseId], [AppointmentTypeId]  [ApptDateTime]                  [CustomerId]
Run Code Online (Sandbox Code Playgroud)

如果我有很多具有相同的等式和不等式字段但包含不同字段的索引建议,那么包含更多字段还是包含更少的字段会更好吗?同样,目标是创建1个索引与3个(如果3个包含不同的列).

最后,如果有任何好的资源可以为这样的事情提供良好的经验法则或一般指导方针,我将不胜感激,如果可以提供这些链接.

Bra*_*adC 2

顺序对于索引列很重要,但对于包含列则不重要。 这是因为只有键列用于查找。

您必须“阅读大部分文档的字里行间”,但这就是他们在这篇 BOL 文章中所暗示的意思

这个讨论更明确地说顺序并不重要。

索引中包含的列的唯一问题几乎是空间 - 如果包含大量列或非常大的列,索引可能会变得非常大。但这意味着您绝对不想创建两个单独的索引,每个索引具有相同的键列但包含不同的键列。那么你只会加剧你的空间问题。