.net 在按大数据类型搜索SQL时提高性能?

.net 在按大数据类型搜索SQL时提高性能?,.net,sql-server,performance,search,large-data,.net,Sql Server,Performance,Search,Large Data,场景: 我在使用.Net上的指纹识别系统。每个指纹模板被捕获为长度为1632的字节数组类型,但大多数模板并没有使用所有长度。我将它们作为VARBINARY数据类型“Template”列插入SQL数据库 现在要执行身份验证,我需要将输入指纹样本与每个SQL记录中的“Template”列(即VARBINARY数据类型)进行比较 问题: 我知道会有一个性能问题,因为“模板”列包含一个大数据类型。我的问题是:在我的场景中,基于大型VARBINARY数据类型列搜索匹配记录的最佳方法是什么?非常感谢您的帮助

场景:

我在使用.Net上的指纹识别系统。每个指纹模板被捕获为长度为1632的字节数组类型,但大多数模板并没有使用所有长度。我将它们作为VARBINARY数据类型“Template”列插入SQL数据库

现在要执行身份验证,我需要将输入指纹样本与每个SQL记录中的“Template”列(即VARBINARY数据类型)进行比较

问题:


我知道会有一个性能问题,因为“模板”列包含一个大数据类型。我的问题是:在我的场景中,基于大型VARBINARY数据类型列搜索匹配记录的最佳方法是什么?非常感谢您的帮助。

这个想法-快速搜索只使用16个字节(存储的计算列),请使用索引

测试数据

INSERT INTO [Fingerprint] ([FingerprintBin])
    VALUES (0x010203040506)
GO
-- Insert 1000 random value
INSERT INTO [Fingerprint] ([FingerprintBin])
    VALUES (NEWID())
GO 1000
快速搜索

DECLARE @FingerprintBin  VARBINARY(1632) = 0x010203040506

-- Index seek in execution plan
SELECT [ID]
FROM [Fingerprint]
WHERE [SearchCriteria] = CAST(HASHBYTES('MD5',@FingerprintBin) as BINARY(16))
    AND [FingerprintBin] = @FingerprintBin;
GO
DECLARE @FingerprintBin  VARBINARY(1632) = 0x010203040506

-- Index seek in execution plan
SELECT [ID]
FROM [Fingerprint]
WHERE [SearchCriteria] = CAST(HASHBYTES('MD5',@FingerprintBin) as BINARY(16))
    AND [FingerprintBin] = @FingerprintBin;
GO