【发布时间】:2011-04-15 06:23:34
【问题描述】:
为了争论,假设它适用于 SQL 2005/8。我了解,当您在表上放置索引以调整 SELECT 语句时,这些索引需要在 INSERT / UPDATE / DELETE 操作期间维护。
我的主要问题是:
SQL Server 何时维护表的索引?
我有很多后续问题:
我天真地假设它会在命令执行后这样做。假设您要插入 20 行,它会在插入并提交 20 行后维护索引。
在以下情况下会发生什么 脚本具有多个语句 靠在桌子上,但在其他方面 不同的陈述?
服务器是否有智能 毕竟要维护索引 语句被执行或执行 每个语句?
我见过在大型/许多INSERT/UPDATE 操作后删除并重新创建索引的情况。
这可能会导致重建 整个表的索引,即使你 只更改少数几行?
会有性能优势吗 在尝试整理
INSERT和UPDATE动作成更大的批次, 比如说通过收集要插入的行 临时表,而不是做 许多较小的插入物?- 如何整理上面的行以防止删除索引与遭受维护打击?
很抱歉问题泛滥 - 这是我一直都知道要注意的事情,但是在尝试调整脚本以获得平衡时,我发现我实际上不知道何时进行索引维护。
编辑:我了解性能问题很大程度上取决于插入/更新期间的数据量和索引数量。再次为了争论,我有两种情况:
- 针对 选择。
- 索引灯台 (PK)。
这两种情况都会有大量的插入/更新批处理,比如 10k+ 行。
编辑 2: 我知道能够在数据集上分析给定脚本。但是,分析并没有告诉我为什么给定的方法比另一种更快。我对索引背后的理论以及性能问题的根源更感兴趣,而不是明确的“这比那个更快”的答案。
谢谢。
【问题讨论】:
-
好问题。对于第二部分,这将完全取决于索引的数量和内容,即删除和重建更快还是仅在索引之上更新更快。与 SQL 中的大多数事情一样,没有 100% 正确的答案或方法。
-
标签: sql-server indexing query-performance