gpt4 book ai didi

sql - 大量 UPDATE 查询会减慢页面速度

转载 作者:行者123 更新时间:2023-12-01 19:46:24 27 4
gpt4 key购买 nike

我正在阅读和验证通过我们的 ASP.net 网站(用 VB.Net 编码)提交的大型固定宽度文本文件(范围为 10-50K 行)。我对文件进行初始扫描以检查基本问题(行长度等)。然后我将每一行导入 MS SQL 表中。每个数据库行基本上由一个record_ID(主,自动递增)和大约50个varchar字段组成。

插入完成后,我对文件运行验证函数,根据一系列条件(修剪长度、isnumeric、范围检查等)检查每行中的每个字段。如果它在任何字段中发现错误,则会将一条记录插入到 Errors 表中,该表包含 error_ID、record_ID 和错误消息。此外,如果该字段以特定方式失败,我必须对该字段进行“重置”。重置可能包括清空整个字段,或者简单地将值替换为另一个值(例如,将字符串替换为删除了所有非法字符的新字符串)。

我有一个 5,000 行的测试文件。上传、初始检查和导入大约需要 5-6 秒。详细的错误检查和插入错误表大约需要 5-8 秒(该文件中大约有 1200 个错误)。然而,对于需要重置的 750 个字段,“重置”部分大约需要 40-45 秒。当我注释掉重置函数(立即返回而不实际调用 UPDATE 存储过程)时,该过程非常快。打开重置后,页面需要 50 秒才能返回。

我的更新存储过程正在使用 http://sommarskog.se/dynamic_sql.html 中的一些推荐代码,它使用 CASE 而不是动态 SQL:

UPDATE dbo.Records
SET dbo.Records.file_ID = CASE @field_name WHEN 'file_ID' THEN @field_value ELSE file_ID END,
.
. (all 50 varchar field CASE statements here)
.
WHERE dbo.Records.record_ID = @record_ID

有什么方法可以帮助我在这里表现。我可以以某种方式将所有这些 UPDATE 调用分组到一个事务中吗?我应该以某种方式重新处理 UPDATE 查询吗?或者只是 750 多个更新,而且速度很慢(它是一个带有 8GB 内存的四核服务器)。

任何建议表示赞赏。

最佳答案

不要在sql中这样做;在代码中修复数据,然后进行更新。

如果您有 sql 2008,请查看表值参数。它使您能够将整个表作为参数传递给 s'proc。从他们那里你只需一条插入/更新或合并语句

关于sql - 大量 UPDATE 查询会减慢页面速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2837248/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com