【发布时间】:2020-05-29 10:24:21
【问题描述】:
我有一个场景,我需要更新近 2000 万条记录的哈希键值。哈希键需要使用近70个属性生成,会在频繁的连接条件下使用。
我正在将HASHBYTES 输出转换为NVARCHAR,然后更新具有近2000 万条记录的临时表。更新语句需要 3 多个小时才能运行。
UPDATE #TempSomeTable
SET HashKey = CONVERT(NVARCHAR(50), HASHBYTES('SHA2_256',CONCAT(ISNULL(COL_1,'NA'),ISNULL(COL_2,'NA'),ISNULL(COL_3,'NA'),.....ISNULL(COL_70,'NA'))),2)
这里,HashKey 的数据类型是NVARCHAR(50)。
这里有人可以建议如何提高性能吗?
我正在看几个选项:
- 将临时表转换为 MEMORY OPTIMIZED 表
- 在
UPDATE语句之前的某处应用ISNULL - 将数据类型从
NVARCHAR(50)更改为VARCHAR(50)或BINARY(32) - 代替
UPDATE,将数据写入新的临时表并在SELECT中导出哈希键,同时将记录插入新表(内存优化表可能代替临时表)
请帮助和反馈。
【问题讨论】:
-
这是一个非常特定于 SQL Server 的问题。
标签适用于 ANSI/ISO SQL。