資料庫表通常將 SHA256 雜湊值儲存為二進位值。漢明距離表示兩個雜湊值之間位元差異的數量,是相似性分析的關鍵指標。本文旨在提供一種 SQL 解決方案來計算給定值與指定列中每個雜湊之間的漢明距離。
將二進位字串分解為更小的整數區塊,計算每個區塊的漢明距離,然後對結果求和是一種麻煩且效能有限的方法。
將雜湊值儲存在多個 BIGINT 欄位而不是單一 BINARY 欄位中顯著改善表現。這允許建立可以有效計算多個 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中文網其他相關文章!