【问题标题】:Am I supposed to drop and recreate indexes on tables every time I add data to it?每次向表中添加数据时,我是否应该删除并重新创建表上的索引?
【发布时间】:2020-01-10 17:37:51
【问题描述】:

我目前正在使用 MSSQL Server,我创建了一个包含 4 列索引的表。我计划在每个月末添加 1mm 行。每次向表中添加数据时是否习惯删除索引并重新创建它们?

【问题讨论】:

    标签: sql sql-server tsql indexing query-optimization


    【解决方案1】:

    不要重新创建索引。相反,您可以使用update statistics 来计算给定索引或整个表的统计信息:

    UPDATE STATISTICS mytable myindex;   -- statistics for the table index
    UPDATE STATISTICS mytable;           -- statistics for the whole table
    

    【讨论】:

      【解决方案2】:

      我不认为这是习惯性的,但并不少见。假设在数据加载期间数据库不会用于其他任务,否则,您将遇到其他问题。

      如果您只是禁用索引,它可以节省时间和精力:

      ALTER INDEX IX_MyIndex ON dbo.MyTable DISABLE
      

      可以在here 找到有关此重要主题的更多信息。请特别注意,禁用聚集索引将阻止对表的所有访问(即不要这样做)。如果正在加载的数据按 [聚集索引] 顺序排序,那会有所帮助。

      最后一点,做一些测试。 1MM 行似乎没有那么多;重新创建索引可能会耗尽您节省的时间。

      【讨论】:

        猜你喜欢
        • 2012-02-09
        • 2010-09-21
        • 1970-01-01
        • 2014-12-10
        • 2018-10-17
        • 1970-01-01
        • 2011-05-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多