一尘不染

关于为缺少索引的SQL Server创建索引的想法

sql

我正在努力优化SQL Server 2008数据库的性能,并使用各种DMV的输出来识别丢失的索引,未使用的索引等。

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

终极失踪者索引查找器

终极重复索引查找器

终极指数使用情况报告器

当尝试创建新索引时,我知道我需要保持聪明,并尝试通过正确地创建建议,将许多建议归为尽可能少的索引,以便它们可以很好地服务于一些不同的查询。当唯一的区别可能是所包含的列等时,为每个查询创建一个单独的索引。

因此,我想了解社区的想法,看看人们是否可以回答一些有关读取DMV结果和构建新索引的问题。

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

采取以下两个索引建议。 您会怎么做才能使1适合两者?

object_name equality_columns                    inequality_columns              included_columns
    Appointment [FranchiseId], [AppointmentTypeId]  [CustomerId], [ApptDateTime]    NULL
    Appointment [FranchiseId], [AppointmentTypeId]  [ApptDateTime]                  [CustomerId]

如果我在相等和不相等字段相同但包含字段不同的情况下有很多索引建议,则最好包含更多字段还是减少包含字段的数量呢?
同样,目标是创建1个索引与3个索引(如果3个包含不同的包含列)。

最后,如果有任何好的资源可以为此类事情提供良好的经验法则或一般准则,那么我将不胜感激,如果可以提供这些链接。


阅读 154

收藏
2021-03-17

共1个答案

一尘不染

顺序对于索引列很重要,但不包括在内。 这是因为仅键列用于查找。

您必须“大部分阅读”,但这就是他们在BOL文章中所隐含的含义。

在讨论顺序不重要时,该讨论更为明确。

几乎是 唯一的 ,在指标包括列关注的是空间-该指数可以得到相当大的,如果你有大量的列,或者非常大的列。但是,这意味着您 绝对 不希望做两个
单独的 索引,每个索引具有相同的键列,但包含的键列不同。然后,您将使您的空间问题更加复杂。

2021-03-17