栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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)  );


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/415241.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号