SQL Server 2008 中的高效批量删除
在数据库管理中,经常出现高效数据删除的需求。虽然 SQL Server 提供标准 DELETE 语句,但对于大型数据集来说它们可能非常耗时。此问题探讨 SQL Server 是否为批量 DELETE 操作提供批量复制 (bcp) 的替代方案。
不能使用 TRUNCATE,请改用 WHERE
所呈现的查询询问是否有在 SQL Server 中批量删除的解决方案。问题是删除应受到 WHERE 子句的限制,从而使 TRUNCATE 成为不合适的选项。
没有与 DELETE 等效的批量复制
不幸的是,没有批量复制SQL Server 中 DELETE 操作的复制等效项。带有 WHERE 子句的 DELETE 语句必须作为标准 SQL 查询执行。
批量 DELETE 以实现可扩展性
对于大型数据集,请考虑批量 DELETE 操作。这些涉及将 DELETE 语句分成较小的批次,如下所示:
SELECT 'Starting' --sets @@ROWCOUNT WHILE @@ROWCOUNT <> 0 DELETE TOP (xxx) MyTable WHERE ...
高百分比删除的替代方法
删除绝大多数行时,另一种方法可能更有效:
SELECT col1, col2, ... INTO #Holdingtable FROM MyTable WHERE ..opposite condition.. TRUNCATE TABLE MyTable INSERT MyTable (col1, col2, ...) SELECT col1, col2, ... FROM #Holdingtable
以上是SQL Server 2008 中是否有比标准 DELETE 语句更快的批量删除替代方法?的详细内容。更多信息请关注PHP中文网其他相关文章!