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

时间:2009-01-14 17:18:14

标签: sql sql-server-2008 indexing performance

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

我主要使用依赖于SQL Server提供的DMV数据的这3个脚本(来自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个包含不同的列)。

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

1 个答案:

答案 0 :(得分:2)

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

你必须在大多数文档中“阅读”,但这就是他们在this BOL article中所暗示的内容

This discussion更明确地说顺序并不重要。

索引中包含列的唯一问题几乎就是空间 - 如果包含大量列或非常大的列,索引会变得非常大。但这意味着您肯定不想做两个单独的索引,每个索引具有相同的键列但包含不同的键列。然后你只是复合你的太空问题。