Maison  >  Article  >  base de données  >  Comment puis-je calculer efficacement la distance de Hamming pour les hachages SHA256 en SQL ?

Comment puis-je calculer efficacement la distance de Hamming pour les hachages SHA256 en SQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-25 08:53:44142parcourir

How Can I Efficiently Calculate Hamming Distance for SHA256 Hashes in SQL?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn