多个索引与强制表扫描

时间:2010-11-13 10:10:31

标签: sql-server indexing relational-database

我正在优化我正在处理的SQL Server 2008数据库中的索引。现在我在“中央”桌子上。

此表连接在7列上。它还有一个主键(当然),加上我以DESC顺序编入索引的日期戳。由于连接的性质,我认为需要6个索引(一些连接是超低基数的表或不会被查询)。

但是,这个表写得很多。 6个索引的性能将会很差(1个是2列索引)。可以对大多数连接表运行查询,因此我看不出如何删除任何索引。

有谁知道确定如何平衡索引数量的最佳做法?

更新

以下是表中感兴趣的列:

MentionID       int             primary key
ParentID         int             indexed
ProfileID       int             indexed
SourceCategoryID tinyint         indexed with next column
SourceID         int
RoleplayerID     int             indexed
DateStamp       smalldatetime   indexed DESC
Subject       nvarchar(1000)
KeyMessage     nvarchar(1000)
SentimentID   tinyint         unindexed: low cardinality
ScopeID       tinyint         unindexed: low cardinality

1 个答案:

答案 0 :(得分:1)

只有一个“最佳实践”:再次尝试测量,测量,测量和测量。

没有理论上的方法可以了解这些额外的指数会如何影响您的表现 - 您需要尝试看看。

Kimberly Tripp在听到博客文章Spring cleaning your indexes时非常详细地介绍了一种可能有用的方法。它并没有真正给你很多规则如何知道要使用多少索引 - 但它为你提供了方法和提示如何找出哪些索引可能根本不被使用 - 这些可以被抛出来加速你的处理。

另一方面:SQL Server也有一个DMV来告诉你它认为哪些索引有用并且有助于加快查询速度 - 不时检查DMV以查看SQL Server查询优化器想要的内容添加;如果这与您即将创建的指数一致,那么您可能正走在正确的轨道上!

相关问题