gpt4 book ai didi

MySQL:高效的二进制值比较

转载 作者:行者123 更新时间:2023-11-29 08:33:47 25 4
gpt4 key购买 nike

我的表有 8 个 VARCHAR 字段,每个字段都是 64 位的二进制字符串。我的目标是获得 Hamming distance对于每个寄存器。我正在使用下一个查询来执行此操作:

SELECT 
BIT_COUNT(CONV(fp.bin_str0, 2, 10 ) ^ CONV('0000000001101111000000000101011100000000001010100000000001111101', 2, 10 )) +
BIT_COUNT(CONV(fp.bin_str1, 2, 10 ) ^ CONV('0000000010110001000000001000000000000000011000010000000011110100', 2, 10 )) +
BIT_COUNT(CONV(fp.bin_str2, 2, 10 ) ^ CONV('0000000010010100000000000010101100000000110001000000000011100100', 2, 10 )) +
BIT_COUNT(CONV(fp.bin_str3, 2, 10 ) ^ CONV('0000000011101011000000000001110000000000101100010000000000011001', 2, 10 )) +
BIT_COUNT(CONV(fp.bin_str4, 2, 10 ) ^ CONV('0000000000010000000000000011010100000000111011100000000001001101', 2, 10 )) +
BIT_COUNT(CONV(fp.bin_str5, 2, 10 ) ^ CONV('0000000000101111000000000110101000000000000010100000000000101101', 2, 10 )) +
BIT_COUNT(CONV(fp.bin_str6, 2, 10 ) ^ CONV('0000000000011000000000000101011000000000001010000000000000001011', 2, 10 )) +
BIT_COUNT(CONV(fp.bin_str7, 2, 10 ) ^ CONV('0000000000101011000000000011100100000000000100000000000000111010', 2, 10 )) from mytable fp

所以这个查询非常慢。有一些原因:mytable有3M寄存器,字段fp.bin_stri是VARCHAR类型。

由于MySQL有BINARY类型,我可以对BINARY类型的fp.bin_stri执行相同的查询吗?怎么办?

我很困惑,因为当我将 fp.bin_stri 更改为 BINARY 时,该字段的数据已显示为 BLOB,现在我不知道查询应该是什么样子。它应该使用CONV吗?

最佳答案

64 位二进制字符串的大小与 MySQL 的 BIGINT 类型相同(现代硬件上 double float 或长整型的标准大小)。使用 BIGINT UNSIGNED 存储每个字段,然后您可以使用 b'1010...' 语法而不是 CONV()< 与其他位字段进行比较.

BIT_COUNT(fp.strN ^ b'0000000001101111000000000101011100000000001010100000000001111101')

应该非常快,因为硬件设计用于对 64 位值执行位操作。

关于MySQL:高效的二进制值比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15791497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com