Calcul de la distance de Hamming en SQL pour les chaînes binaires
Le défi se pose en trouvant une méthode efficace pour calculer la distance de Hamming entre les hachages SHA256 stockés dans une colonne BINARY(32). L'approche simple consistant à décomposer les chaînes binaires en sous-chaînes, à les transformer en entiers et à effectuer des calculs de distance de Hamming par sous-chaîne semble lourde et inefficace.
Cependant, il existe une solution alternative qui améliore considérablement les performances. En stockant le hachage dans quatre colonnes BIGINT, chacune contenant une sous-chaîne de 8 octets des données d'origine, il devient possible d'utiliser la fonction suivante :
<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>
Cette fonction calcule la distance de Hamming en effectuant des opérations XOR au niveau du bit. et compter le nombre de 1 dans les résultats. Cette approche est considérablement plus rapide que la méthode de décomposition de chaînes binaires.
De plus, pour une efficacité améliorée, il est recommandé d'utiliser des colonnes BIGINT au lieu d'une colonne BINARY pour stocker le hachage. Cette méthode alternative utilisant les BIGINT peut entraîner une exécution plus de 100 fois plus rapide.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!