批量删除数据时如何提高效率?

spring_ok 2003-04-22 09:56:35
现一数据库中有大量的表,需要将其数据清除后重新从另一数据库中转换新数据。
由于许多表相互间有设置外键关联,Truncate Table语句在处理这种表时会失败,所以仅采用 Delete From table1的方式来删除。

大致的存贮过程如下:
CREATE PROCEDURE [kn_ClearData] AS

delete from table1
delete from table2
delete from table3
delete from table4
delete from table4

delete from ....

delete from tableN

Go

有两个疑问:
1 如果在每一个delete后面加一个GO,则这些SQL会单独执行而不是成批执行,这样会否提交一些性能呢?或者有其他方法可以提高性能?
2 有些表中的Identity字段,在用 Delete From tableN 删除全部数据后如何重置其种子值,就像Truncate table的效果一样?

...全文
315 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjan 2003-04-23
  • 打赏
  • 举报
回复
truncate table_1
...
truncate table_n

上面的语句多执行几次就可以了,你试试
pengdali 2003-04-22
  • 打赏
  • 举报
回复
小黑 exec sp_dboption yourDB,'trunc. log on chkpt.',true
是截断日志
happydreamer 2003-04-22
  • 打赏
  • 举报
回复
把故障还原模型改为简单,可以减少写日志

or

exec sp_dboption yourDB,'trunc. log on chkpt.',true
就可以在INSERT,UPDATE,DELETE时不写日志了
july 2003-04-22
  • 打赏
  • 举报
回复
truncate快的原因就是因为它不记日志,因此也是无法恢复的
spring_ok 2003-04-22
  • 打赏
  • 举报
回复
非常感谢。

正如我在问题中所说,由于有较多的表设置了外键关联,所以不能使用Truncate table.
enhydraboy 2003-04-22
  • 打赏
  • 举报
回复
完全同意大力的意见
pengdali 2003-04-22
  • 打赏
  • 举报
回复
1、Truncate table 比 delete快

2、
方法1:
truncate table 你的表名 --這樣不但將數據刪除,而且可以重新置位identity屬性的字段。

方法2:
delete from 你的表名
dbcc checkident(你的表名,reseed,0) --重新置位identity屬性的字段,讓其下個值從1開始

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧