快速更新SQL数据库中的数千行

时间:2018-02-19 03:06:40

标签: sql-server

我想为所有19k行更新一个列值我想知道更新SQL数据库中数千行的最快方法。请建议。

下面是我尝试过的代码,但它需要一整天才能执行,这会使现有应用程序冻结。

update table_name 
set column_name_value = 2

1 个答案:

答案 0 :(得分:0)

如果您只是将整个列更改为单个值,我会问首先使用该列有什么意义。无论哪种方式,如果您要更新LIVE生产事务数据库,我会先备份。

如果允许,请将数据库切换到SIMPLE模式。这将减少trans日志使用的空间量,或尝试BULK INSERT模式。这可能不是一种选择。

也就是说,您可以删除列,并使用默认值读取它。

ALTER TABLE table_name DROP COLUMN column_name;
ALTER TABLE table_name ADD column_name INTEGER NOT NULL DEFAULT 2;

您也可以这样做:

UPDATE table_name WITH (TABLOCKX) SET column_name = 2;

如果您无法执行上述任何操作,请将数据库停止使用,那么您可能需要对更新进行分块。

尝试以下操作(如果您碰巧在桌面上有身份密钥):

DECLARE @num_chunks INT = 10 -- this will break your update into 10 smaller updates
DECLARE @counter INT = 0

WHILE @counter < @num_chunks
BEGIN
  UPDATE table_name SET column_name = 2 
  WHERE (int_identity_column - @counter) % @num_chunks = 0

  PRINT 'DONE WITH GROUP ' + CAST(@counter AS VARCHAR) + ' AT ' + CAST(getdate() as varchar)

  SET @counter = @counter + 1
END

如果碰巧遇到问题并且它被中断,使用此方法将允许您从停止的位置重新启动进程。