La HASHBYTES
fonction ne prend que 8 000 octets en entrée. Parce que vos entrées sont potentiellement plus grande que celle, des doublons dans la gamme du champ qui obtient haché va provoquer des collisions, quel que soit l'algorithme choisi. Considérez soigneusement la plage de données que vous prévoyez de hacher - l'utilisation des 4000 premiers caractères est le choix évident , mais peut-être pas le meilleur choix pour vos données.
Dans tous les cas, en raison de ce qu'est une fonction de hachage, même si les entrées sont de 8000 octets ou moins, la seule façon de garantir l'exactitude de 100% dans les résultats est de comparer les valeurs de base à un moment donné (lire: pas nécessairement en premier ). Période.
L'entreprise déterminera si une précision de 100% est requise ou non. Cela vous indiquera que (a) la comparaison des valeurs de base est requise , ou (b) vous devriez envisager de ne pas comparer les valeurs de base - combien de précision doit être échangée contre les performances.
Bien que les collisions de hachage soient possibles dans un ensemble d'entrée unique, elles sont extrêmement rares, quel que soit l'algorithme choisi. L'idée globale d'utiliser une valeur de hachage dans ce scénario est de réduire efficacement les résultats de jointure à un ensemble plus gérable, pour ne pas nécessairement arriver à l'ensemble final de résultats immédiatement. Encore une fois, pour une précision de 100%, cela ne peut pas être la dernière étape du processus. Ce scénario n'utilise pas de hachage à des fins de cryptographie, donc un algorithme tel que MD5 fonctionnera bien.
Il serait extrêmement difficile pour moi de justifier le passage à un algorithme SHA-x à des fins de «précision», car si l'entreprise va paniquer sur les minuscules possibilités de collision de MD5, il y a de fortes chances qu'elles paniquent également les algorithmes SHA-x ne sont pas parfaits non plus. Ils doivent soit accepter la légère imprécision, soit exiger que la requête soit exacte à 100% et en direct avec les implications techniques associées. Je suppose que si le PDG dort mieux la nuit en sachant que vous avez utilisé SHA-x au lieu de MD5, eh bien, très bien; cela ne signifie toujours pas grand-chose d'un point de vue technique dans ce cas.
En parlant de performances, si les tables sont principalement en lecture et que le résultat de la jointure est nécessaire fréquemment, envisagez d'implémenter une vue indexée pour éliminer la nécessité de calculer la jointure entière chaque fois qu'elle est demandée. Bien sûr, vous échangez le stockage pour cela, mais cela peut en valoir la peine pour l'amélioration des performances, en particulier si une précision de 100% est requise.
Pour plus d'informations sur l'indexation des valeurs de chaînes longues, j'ai publié un article qui présente un exemple de procédure à suivre pour une seule table et présente les éléments à prendre en compte lors de la tentative du scénario complet dans cette question.