ホームページ >データベース >mysql チュートリアル >SQL で SHA256 ハッシュのハミング ディスタンスを効率的に計算するにはどうすればよいですか?

SQL で SHA256 ハッシュのハミング ディスタンスを効率的に計算するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-25 08:53:44260ブラウズ

How Can I Efficiently Calculate Hamming Distance for SHA256 Hashes in SQL?

バイナリ文字列に対する 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。