每次向表中添加数据时,我是不是应该删除并重新创建表上的索引?
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 行似乎没有那么多;重新创建索引可能会耗尽您节省的时间。
【讨论】:
以上是关于每次向表中添加数据时,我是不是应该删除并重新创建表上的索引?的主要内容,如果未能解决你的问题,请参考以下文章