Sql server 多索引与强制表扫描 我正在优化我正在处理的SQL Server 2008数据库中的索引。现在我在“中央”桌上

Sql server 多索引与强制表扫描 我正在优化我正在处理的SQL Server 2008数据库中的索引。现在我在“中央”桌上,sql-server,indexing,relational-database,Sql Server,Indexing,Relational Database,此表由7列组成。它还有一个主键(当然),加上一个我按DESC顺序索引的日期戳。由于联接的性质,我认为需要6个索引(有些联接是到基数极低的表的,或者不会被查询) 然而,该表被大量写入。如果有6个索引(1是2列索引),性能将会很差。查询可以针对大多数联接表运行,因此我不知道如何删除任何索引 有人知道如何平衡索引数量的最佳实践吗 更新: 以下是表中感兴趣的列: MentionID int primary key ParentID int

此表由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
只有一个“最佳实践”:尝试并测量,测量,再测量

从理论上讲,没有办法知道这些额外的指标会如何影响你的表现——你需要试试看

金伯利·特里普(Kimberly Tripp)在其博客文章中详细描述了一种可能有用的方法。它实际上并没有给你多少规则来知道要使用多少个索引,但它给了你方法和提示如何找出哪些索引可能根本不被使用,这些可以被抛出来加速你的处理

另一方面:SQL Server还有一个DMV,可以告诉您它认为哪些索引是有益的,哪些索引有助于加快您的查询-不时检查该DMV,看看SQL Server查询优化器希望添加什么;如果这与您将要创建的索引一致,那么您可能走在了正确的轨道上


同意。在光谱的另一端,表格很小,有规则。我想在这方面可能会有一些规则或至少是指导方针。@IanC:用一些额外的提示、指针、小贴士更新了我的答案。你是如何得出结论的:“我认为需要6个索引的”?