为了争论,假设它是针对 SQL 2005/8 的。我了解当您在表上放置索引以调整SELECT
语句时,这些索引需要在INSERT
//操作期间维护UPDATE
。DELETE
我的主要问题是:
SQL Server 何时维护表的索引?
我有很多后续问题:
我天真地假设它会在命令执行后这样做。假设您要插入 20 行,它会在插入并提交 20 行后维护索引。
如果脚本具有针对表的多个语句,但在其他方面是不同的语句,会发生什么情况?
服务器是否具有在执行所有语句后维护索引的智能,还是每个语句都执行此操作?
我见过在大型/许多INSERT
/UPDATE
操作之后删除并重新创建索引的情况。
即使您只更改少数行,这可能会导致重建整个表的索引?
与进行许多较小的插入相比,尝试整理
INSERT
和UPDATE
操作成更大的批次(例如通过收集行以插入到临时表中)是否会带来性能优势?- 如何整理上面的行以防止删除索引而不是进行维护?
很抱歉问题泛滥 - 这是我一直都知道要注意的事情,但是在尝试调整脚本以获得平衡时,我发现我实际上不知道何时进行索引维护。
编辑:我知道性能问题很大程度上取决于插入/更新期间的数据量和索引数量。再次为了争论,我有两种情况:
- 为选择调整的索引重表。
- 索引灯台 (PK)。
这两种情况都会有一个大的插入/更新批次,比如 10k+ 行。
编辑 2:我知道能够在数据集上分析给定脚本。但是,分析并不能告诉我为什么给定的方法比另一种更快。我对索引背后的理论以及性能问题的根源更感兴趣,而不是确定的“这比那个更快”的答案。
谢谢。