Une application particulière (ASP.Net/C# & SQL Server Express 2014) possède les exigences suivantes. Sur une certaine action de l'interface utilisateur, les éléments suivants:Comparaison d'un grand nombre de texte de grande chaîne dans SQL Server - Performance est meilleure si hachage est comparé à la place des chaînes
- Plus de 120 blocs de texte d'environ 10 000 caractères (unicode) doivent être comparés à un autre ensemble correspondant de plus de 120 blocs.
- Ce bloc de texte contient du HTML et le contenu réel du texte est susceptible d'être dans n'importe quelle langue.
La solution que j'ai en tête est d'utiliser HASHBYTES et de hacher toutes les valeurs et conserver. Quand il est temps de comparer, je comparerais la valeur de hachage au lieu du grand bloc de texte. Je vais hacher les valeurs une fois et les garder (et ressasser quand la valeur de la source change) et les utiliser plusieurs fois pour la comparaison.
Voici mes questions:
- est mon solution optimale d'un point de performance?
- Le HASHBYTE (disons SHA1) est-il sujet à une collision de hachage? Devrais-je vérifier la valeur de la chaîne lorsque je reçois un hachage?
Compte tenu de la taille de vos chaînes, 'HASHBYTES' pourrait ne pas être une solution viable, car il [sur SQL 2014 et plus tôt, il prend en charge que les entrées de jusqu'à 8000 octets] (https://msdn.microsoft.com/fr-fr/library/ms174415.aspx) –