【发布时间】:2019-07-05 21:40:53
【问题描述】:
我正在努力在合理的时间内更新数据库中的 980,000 条记录。
我必须在 PriceID 等于组的最大值(按 ProductID 分组)的行中将 NextLp 的值设置为“NULL”。
为了形象化,这是我的例子:
+-----------+---------+--------+--------------- ------+ |产品编号 |价格ID |下一张 |将 NextLp 设置为 NULL? | +-----------+---------+--------+------------------ ---+ |苹果 | 1 | - | | +-----------+---------+--------+------------------ ---+ |苹果 | 2 | - | | +-----------+---------+--------+------------------ ---+ |苹果 | 3 | - |是 | +-----------+---------+--------+------------------ ---+ |梨 | 1 | - | | +-----------+---------+--------+------------------ ---+ |梨 | 2 | - |是 | +-----------+---------+--------+------------------ ---+
我尝试了各种方法,但所有这些方法都至少需要 15 秒才能更新 100 条记录。还有 979,100 条记录要做 - 所以我的方法绝对不可行。
感谢您的帮助。
版本为 MS SQL 2016
【问题讨论】:
-
你有触发器吗?你在同一张表上有并发查询吗?您的数据库是否处于完全恢复模式?您在查询的列上有索引?请尽可能多地添加信息,包括实际的更新声明。
-
@EzLo 无法回答。服务器相当远程,我只能通过可以运行查询的控制台访问。尽管如此,对相同数量记录的其他更新查询运行时间不到 50 秒。
标签: sql-server performance tsql sql-server-2016