【发布时间】:2011-09-18 15:16:43
【问题描述】:
我有一个超过 2000 万行的表,当我这样做时:
DELETE [Table] WHERE ID = ?
需要 40 多秒。 ID 列是聚集的。
这是你所期望的吗?还是可以优化一下?
【问题讨论】:
标签: sql-server performance clustered-index
我有一个超过 2000 万行的表,当我这样做时:
DELETE [Table] WHERE ID = ?
需要 40 多秒。 ID 列是聚集的。
这是你所期望的吗?还是可以优化一下?
【问题讨论】:
标签: sql-server performance clustered-index
还可以尝试批量删除数据。示例
set rowcount 10000
delete [table] where id = ?
while @@rowcount >0
begin
delete [table] where id = ?
end
【讨论】:
除了 JNK 在他们的回答中包含的要点之外,我看到的一个特殊杀手是当您从一个或多个外键约束的引用表中删除行时,以及引用表未编入索引 - 您强制对每个表进行表扫描,然后才能接受删除。
【讨论】:
这将取决于很多你没有告诉我们的因素......
删除了多少行?更多的行显然意味着更多的时间。
还有其他索引吗?每个索引都需要更新,而不仅仅是集群索引。如果您要删除 10 个索引,则大约需要 10 倍的时间(非常粗略)。
还有其他活动吗?如果发生更新或插入,则很可能存在等待和争用。
一般来说,操作所需的秒数高度取决于您的硬件设置。如果您在台式机上运行此程序,而不是在具有高性能阵列和 12 个内核的服务器上运行,那么预期会大不相同。
【讨论】: