Die HASHBYTES
Funktion nimmt nur bis zu 8000 Bytes als Eingabe auf. Da Ihre Eingaben sind möglicherweise größer als das, Duplikate im Bereich des Feldes , das gehasht wird werden Kollisionen verursachen, unabhängig von dem gewählten Algorithmus. Überlegen Sie sorgfältig, welche Datenmenge Sie für den Hash planen - die Verwendung der ersten 4000 Zeichen ist die naheliegende Wahl, ist jedoch möglicherweise nicht die beste Wahl für Ihre Daten.
In jedem Fall besteht die einzige Möglichkeit, um eine 100% ige Richtigkeit der Ergebnisse zu gewährleisten , aufgrund der Hash-Funktion (nicht unbedingt zuerst ). Zeitraum.
Das Unternehmen wird vorschreiben, ob eine 100% ige Genauigkeit erforderlich ist oder nicht. Dies zeigt Ihnen, dass entweder (a) ein Vergleich der Basiswerte erforderlich ist oder (b) Sie in Betracht ziehen sollten , die Basiswerte nicht zu vergleichen - wie viel Genauigkeit für die Leistung abgewogen werden sollte.
Hash-Kollisionen sind in einem eindeutigen Eingabesatz zwar möglich, jedoch unabhängig vom gewählten Algorithmus unendlich selten. Die ganze Idee, in diesem Szenario einen Hash-Wert zu verwenden, besteht darin, die Verknüpfungsergebnisse effizient auf eine handlichere Menge einzugrenzen und nicht unbedingt sofort zur endgültigen Ergebnismenge zu gelangen. Auch dies kann für eine 100% ige Genauigkeit nicht der letzte Schritt in diesem Prozess sein. In diesem Szenario wird kein Hashing für die Kryptografie verwendet, sodass ein Algorithmus wie MD5 problemlos funktioniert.
Es wäre äußerst schwierig für mich, die Umstellung auf einen SHA-x-Algorithmus für "Genauigkeitszwecke" zu rechtfertigen, denn wenn das Unternehmen über die winzigen Kollisionsmöglichkeiten von MD5 ausflippen wird, ist es wahrscheinlich, dass sie dies auch ausflippen werden Auch die SHA-x-Algorithmen sind nicht perfekt. Entweder müssen sie sich mit der leichten Ungenauigkeit abfinden oder die Abfrage muss 100% genau sein und die damit verbundenen technischen Auswirkungen berücksichtigen. Ich nehme an, wenn der CEO nachts besser schläft, weil er weiß, dass Sie SHA-x anstelle von MD5 verwendet haben. es hat in diesem Fall aus technischer Sicht noch nicht viel zu bedeuten.
Apropos Leistung: Wenn die Tabellen meistens gelesen werden und das Verknüpfungsergebnis häufig benötigt wird, sollten Sie eine indizierte Ansicht implementieren, um zu vermeiden, dass die gesamte Verknüpfung bei jeder Anforderung berechnet werden muss. Natürlich müssen Sie dafür den Speicher austauschen, aber es lohnt sich möglicherweise für die Leistungsverbesserung, insbesondere wenn eine 100% ige Genauigkeit erforderlich ist.
Zum weiteren Lesen der Indizierung langer Zeichenfolgewerte habe ich einen Artikel veröffentlicht , in dem ein Beispiel für die Vorgehensweise für eine einzelne Tabelle aufgeführt ist. Außerdem werden einige Aspekte erläutert, die beim Versuch, das vollständige Szenario in dieser Frage auszuführen, zu berücksichtigen sind.