Berechnung der Hamming-Distanz in SQL für Binärzeichenfolgen
Die Herausforderung besteht darin, eine effiziente Methode zur Berechnung der Hamming-Distanz zwischen gespeicherten SHA256-Hashes zu finden eine BINARY(32)-Spalte. Der unkomplizierte Ansatz, die Binärzeichenfolgen in Teilzeichenfolgen zu zerlegen, sie in ganze Zahlen umzuwandeln und teilzeichenfolgenweise Hamming-Distanzberechnungen durchzuführen, erscheint umständlich und ineffizient.
Es gibt jedoch eine alternative Lösung, die die Leistung erheblich verbessert. Durch das Speichern des Hashs in vier BIGINT-Spalten, die jeweils einen 8-Byte-Teilstring der Originaldaten enthalten, wird es möglich, die folgende Funktion zu verwenden:
<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>
Diese Funktion berechnet die Hamming-Distanz durch bitweise XOR-Operationen und Zählen der Anzahl der Einsen in den Ergebnissen. Dieser Ansatz ist erheblich schneller als die binäre String-Zerlegungsmethode.
Zusätzlich wird zur Verbesserung der Effizienz empfohlen, BIGINT-Spalten anstelle einer BINARY-Spalte zum Speichern des Hashs zu verwenden. Diese alternative Methode mit BIGINTs kann zu einer über 100-mal schnelleren Ausführung führen.
Das obige ist der detaillierte Inhalt vonWie kann ich die Hamming-Distanz für SHA256-Hashes in SQL effizient berechnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!