我的表有 8 个 VARCHAR 字段,每个字段都是 64 位的二进制字符串。我的目标是获得 每个寄存器的汉明距离。我正在使用下一个查询:
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
吗?