代码之家  ›  专栏  ›  技术社区  ›  IamIC

多个索引与强制表扫描

  •  2
  • IamIC  · 技术社区  · 14 年前

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

    此表由7列组成。它也有一个主键(当然),加上一个日期戳,我按照描述顺序对其进行索引。由于连接的性质,我认为需要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 回复  |  直到 14 年前
        1
  •  1
  •   marc_s    14 年前

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

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

    金伯利·特里普(Kimberly Tripp)在Hear博客帖子中详细描述了一种可能有帮助的方法, Spring cleaning your indexes . 它并没有给你多少规则,如何知道要使用多少索引——但是它给了你方法和提示,如何找出哪些索引可能根本不被使用——这些可以被抛出来加速你的处理。

    另一方面:SQL Server还提供了一个DMV来告诉您它认为哪些索引是有益的,并且有助于加快查询速度-不时检查该DMV以查看SQL Server查询优化器希望添加什么;如果这与您将要创建的索引一致你可能走对了!