2010-11-13 127 views
2

我正在优化我正在处理的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 
+0

你是怎么来的结论: “我相信6项指标要求”? – 2010-11-13 13:26:44

回答

1

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

有没有理论的方法来知道这些额外的指标会如何影响你的表现 - 你需要尝试看看。

Kimberly Tripp在其博客文章Spring cleaning your indexes中详细描述了一种可能有所帮助的方法。它并没有给你很多规则如何知道有多少指标可以使用 - 但是它给你提供了方法和提示,以便找出哪些指标可能根本不会被使用 - 可以抛出这些指标来加快处理速度。

另一方面:SQL Server也有一个DMV来告诉你它认为哪些索引是有益的,并且有助于加快你的查询速度 - 不时地检查DMV,看看SQL Server查询优化器会喜欢什么添加;如果这符合您即将创建的指数,那么您可能正处于正确的轨道上!

+0

授予。另一方面,表格很小的地方有规则。我认为可能有一些规则或至少在这一方面的指导方针。 – IamIC 2010-11-13 10:17:30

+1

@IanC:更新了我的回答,提供了一些额外的提示,提示,提示 – 2010-11-13 11:00:58

+1

非常感谢! – IamIC 2010-11-13 12:08:02