5
将许多可空整数1:1转换为二进制字符串的最快方法是什么?
我的部分工作量使用CLR函数,该函数实现了怪异的哈希算法来比较行以查看是否有任何列值已更改。CLR函数将二进制字符串作为输入,因此我需要一种快速的方法将行转换为二进制字符串。我希望在整个工作负载中散列大约100亿行,因此我希望这段代码尽可能快。 我有大约300个具有不同架构的表。出于这个问题的目的,请假设一个简单的表结构包含32个可为空的INT列。在此问题的底部,我提供了示例数据以及一种基准测试结果的方法。 如果所有列值都相同,则行必须转换为相同的二进制字符串。如果任何列值不同,则行必须转换为不同的二进制字符串。例如,以下简单的代码将不起作用: CAST(COL1 AS BINARY(4)) + CAST(COL2 AS BINARY(4)) + .. 它不能正确处理NULL。如果COL1第1行为COL2NULL,第2行为NULL,则两行都将转换为NULL字符串。我相信正确处理NULL是正确转换整个行的最难的部分。INT列的所有允许值都是可能的。 要优先考虑一些问题: 如果这很重要,那么在大多数情况下(90%+),列将不会为NULL。 我必须使用CLR。 我必须对这么多行进行哈希处理。我无法保留这些哈希值。 我相信由于CLR功能的存在,我无法使用批处理模式进行转换。 将32个可INT为空的列转换为BINARY(X)或VARBINARY(X)字符串的最快方法是什么? 样本数据和代码如下: -- create sample data DROP TABLE IF EXISTS dbo.TABLE_OF_32_INTS; CREATE TABLE dbo.TABLE_OF_32_INTS ( COL1 INT NULL, COL2 INT NULL, COL3 INT NULL, COL4 INT NULL, COL5 INT NULL, COL6 INT …