ホームページ >データベース >mysql チュートリアル >## SQL データベースのバイナリ文字列のハミング ディスタンスを効率的に計算するにはどうすればよいでしょうか?

## SQL データベースのバイナリ文字列のハミング ディスタンスを効率的に計算するにはどうすればよいでしょうか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-24 19:00:02408ブラウズ

## How Can We Efficiently Calculate Hamming Distance on Binary Strings in SQL Databases?

SQL のバイナリ文字列のハミング距離の計算

SQL データベースに格納されているバイナリ文字列間のハミング距離を効率的に計算するには、BINARY を使用します。列はパフォーマンスが低いため推奨されません。代わりに、データを複数の 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>

これこの関数は、元の 32 バイトの BINARY 列の部分文字列を表す 4 つの BIGINT 列に対して動作します。各部分文字列のハミング距離を計算し、結果を合計します。

テストで実証されているように、この方法を使用すると速度が大幅に向上し、BINARY 列に基づくアプローチよりも 100 倍以上高速です。

さらに、部分文字列変換を使用して BINARY 列のハミング距離を計算する代替アプローチも紹介されていますが、パフォーマンス上の考慮事項により、BIGINT アプローチより劣ると考えられています。

以上が## SQL データベースのバイナリ文字列のハミング ディスタンスを効率的に計算するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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