数据库表通常将 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中文网其他相关文章!