SQL中二进制字符串的汉明距离

SQL中二进制字符串的汉明距离,第1张

SQL中二进制字符串的汉明距离

看来,将数据存储在

BINARY
列中是一种效果很差的方法。获得良好性能的唯一快速方法是将
BINARY
列的内容分为多
BIGINT
列,每列包含原始数据的8字节子字符串。

在我的情况下(32字节),这意味着使用4

BIGINT
列并使用以下函数:

CREATE FUNCTION HAMMINGDISTANCE(  A0 BIGINT, A1 BIGINT, A2 BIGINT, A3 BIGINT,   B0 BIGINT, B1 BIGINT, B2 BIGINT, B3 BIGINT)RETURNS INT DETERMINISTICRETURN   BIT_COUNT(A0 ^ B0) +  BIT_COUNT(A1 ^ B1) +  BIT_COUNT(A2 ^ B2) +  BIT_COUNT(A3 ^ B3);

在我的测试中,使用这种方法比使用这种

BINARY
方法快100倍以上。


FWIW,这是我在解释问题时所暗示的代码。欢迎使用更好的方法来完成相同的事情(我特别不喜欢二进制>十六进制>十进制转换):

CREATE FUNCTION HAMMINGDISTANCE(A BINARY(32), B BINARY(32))RETURNS INT DETERMINISTICRETURN   BIT_COUNT(    CONv(HEx(SUBSTRINg(A, 1,  8)), 16, 10) ^     CONv(HEx(SUBSTRINg(B, 1,  8)), 16, 10)  ) +  BIT_COUNT(    CONv(HEx(SUBSTRINg(A, 9,  8)), 16, 10) ^     CONv(HEx(SUBSTRINg(B, 9,  8)), 16, 10)  ) +  BIT_COUNT(    CONv(HEx(SUBSTRINg(A, 17, 8)), 16, 10) ^     CONv(HEx(SUBSTRINg(B, 17, 8)), 16, 10)  ) +  BIT_COUNT(    CONv(HEx(SUBSTRINg(A, 25, 8)), 16, 10) ^     CONv(HEx(SUBSTRINg(B, 25, 8)), 16, 10)  );


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5037948.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存