データベース テーブルは、多くの場合、SHA256 ハッシュをバイナリ値として保存します。ハミング距離は、2 つのハッシュ間のビットごとの違いの数を表し、類似性分析にとって重要な指標です。この記事の目的は、指定された値と指定された列の各ハッシュの間のハミング距離を計算する SQL ソリューションを提供することです。
バイナリ文字列をより小さな整数のチャンクに分割し、各チャンクのハミング距離を計算し、その結果を合計するのは、面倒でパフォーマンスが制限される方法です。
単一の BINARY カラムではなく複数の BIGINT カラムにハッシュを保存すると、大幅に改善されます。パフォーマンス。これにより、複数の BIGINT 値間のハミング距離を効率的に計算できるカスタム関数を作成できます。
次のカスタム関数を作成して、BIGINT 値間のハミング距離を計算できます。 4 つの BIGINT:
<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>
この関数を使用すると、次のクエリを使用して、指定された値までのハミング距離によってテーブル エントリを並べ替えることができます:
<code class="sql">SELECT * FROM table ORDER BY HAMMINGDISTANCE(col0, col1, col2, col3, UNHEX(<insert supplied sha256 hash here>)) ASC LIMIT 10</code>
SHA256 ハッシュを 4 つの BIGINT 列に分割し、カスタム関数を使用することは、SQL でハミング距離を計算するための非常に効率的なアプローチです。この方法では、ハッシュを BINARY 値として保存し、従来の整数ベースの計算を使用するよりもパフォーマンスが大幅に向上します。
以上がSQL でバイナリ文字列間のハミング距離を効率的に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。