バイナリ文字列に対する SQL でのハミング距離の計算
課題は、次のファイルに保存されている SHA256 ハッシュ間のハミング距離を計算する効率的な方法を見つけることで発生します。 BINARY(32) 列。バイナリ文字列を部分文字列に分割し、それらを整数にキャストし、部分文字列ごとのハミング距離計算を実行する単純なアプローチは、面倒で非効率的に思えます。
しかし、パフォーマンスを大幅に向上させる代替ソリューションがあります。ハッシュを 4 つの BIGINT 列に格納し、それぞれに元のデータの 8 バイトの部分文字列が含まれるようにすることで、次の関数を利用できるようになります。
<code class="sql">CREATE FUNCTION HAMMINGDISTANCE( A0 BIGINT, A1 BIGINT, A2 BIGINT, A3 BIGINT, B0 BIGINT, B1 BIGINT, B2 BIGINT, B3 BIGINT ) RETURNS INT DETERMINISTIC RETURN BIT_COUNT(A0 ^ B0) + BIT_COUNT(A1 ^ B1) + BIT_COUNT(A2 ^ B2) + BIT_COUNT(A3 ^ B3);</code>
この関数は、ビット単位の XOR 演算を実行してハミング距離を計算します。そして結果の中の 1 の数を数えます。このアプローチは、バイナリ文字列分解方法よりもかなり高速です。
さらに、効率を向上させるために、ハッシュを格納するために BINARY 列の代わりに BIGINT 列を使用することをお勧めします。 BIGINT を使用するこの代替方法では、実行が 100 倍以上高速になります。
以上がSQL で SHA256 ハッシュのハミング ディスタンスを効率的に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。