首頁 >資料庫 >mysql教程 >如何有效計算 SQL 中二進位字串之間的漢明距離?

如何有效計算 SQL 中二進位字串之間的漢明距離?

Linda Hamilton
Linda Hamilton原創
2024-10-25 06:11:291028瀏覽

How can I efficiently calculate Hamming distance between binary strings in SQL?

SQL 中二進位字串的漢明距離計算

問題陳述:

資料庫表通常將 SHA256 雜湊值儲存為二進位值。漢明距離表示兩個雜湊值之間位元差異的數量,是相似性分析的關鍵指標。本文旨在提供一種 SQL 解決方案來計算給定值與指定列中每個雜湊之間的漢明距離。

現有低效方法:

將二進位字串分解為更小的整數區塊,計算每個區塊的漢明距離,然後對結果求和是一種麻煩且效能有限的方法。

改進的方法:

將雜湊值儲存在多個 BIGINT 欄位而不是單一 BINARY 欄位中顯著改善表現。這允許建立可以有效計算多個 BIGINT 值之間的漢明距離的自訂函數。

BIGINT 的漢明距離函數:

可以建立以下自訂函數來計算之間的漢明距離四個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 哈希值拆分為四個BIGINT 欄位並使用自訂函數是在SQL 中計算漢明距離的高效方法。與將雜湊值儲存為 BINARY 值和採用傳統的基於整數的計算相比,此方法顯著提高了效能。

以上是如何有效計算 SQL 中二進位字串之間的漢明距離?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn