每次向表中添加数据时,我是不是应该删除并重新创建表上的索引?

Posted

技术标签:

【中文标题】每次向表中添加数据时,我是不是应该删除并重新创建表上的索引?【英文标题】: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 行。每次向表中添加数据时是否习惯删除索引并重新创建它们?

【问题讨论】:

【参考方案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 行似乎没有那么多;重新创建索引可能会耗尽您节省的时间。

【讨论】:

以上是关于每次向表中添加数据时,我是不是应该删除并重新创建表上的索引?的主要内容,如果未能解决你的问题,请参考以下文章

向表中添加大量索引是不是有缺点?

向表中添加了列,但链接图表未使用新列数据更新

mysql中,如何创建一个表,并加一条数据?

MySQL——添加更新与删除数据

从数据库 Django 向表中添加删除原始按钮

如何向表中插入数据以及如何更新删除表中的数据