我试图在12列和大约500万条记录的表上运行以下查询:
UPDATE dbo.Capture
SET STATUS = 501,
BATCH = NULL
WHERE STATUS = 1
STATUS = 1
大约为4百万条记录的记录数。在我最终取消查询之前,该查询运行了一个小时,因为:
我的问题是,是否有更有效的方法来更新这400万条记录。我应该尝试分批更新吗,如果是这样,如何在查询中完成?
我有一个自动索引碎片整理器,它每24小时运行一次,因此索引碎片不会造成任何问题。
答案 0 :(得分:2)
鉴于您要更新大约80%的行,将其拆分可能是最简单的方法。这是一种方法(假设Capture具有名为ID的主键列):
SELECT *
答案 1 :(得分:1)
您仍然必须索引表STATUS
的列dbo.Capture
。它将使您的查询运行速度提高数百倍!
这是操作方法:
CREATE INDEX index_status ON dbo.Capture (STATUS);