私のテーブルには、それぞれ 64 ビットのバイナリ文字列の 8 つの VARCHAR フィールドがあります。私の目標は 、各レジスタのハミング距離を取得することです。私は次のクエリでそれをやっていました:
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
か?