このHASHBYTES
関数は、入力として最大8000バイトしか使用しません。入力は潜在的にそれより大きいため、選択されたアルゴリズムに関係なく、ハッシュされるフィールドの範囲内の重複は衝突を引き起こします。慎重にあなたがハッシュに予定したデータの範囲を検討する-最初の4000個の文字を使用することで明白な選択、しかしではないかもしれない最良のあなたのデータのための選択。
いずれにせよ、ハッシュ関数とは何か、入力が8000バイト以下であっても、結果の100%の正確さを保証する唯一の方法は、ある時点でベース値を比較することです(必ず読んでください:必ずしも最初ではありません)。期間。
企業は、100%の精度が必要かどうかを決定します。これにより、(a)ベース値の比較が必要であるか、(b)ベース値を比較しないことを検討 する必要があること、つまり、パフォーマンスとトレードオフの精度を判断する必要があります。
一意の入力セットではハッシュの衝突が発生する可能性がありますが、選択されたアルゴリズムに関係なく、非常にまれです。このシナリオでハッシュ値を使用するという考え方は、結合結果をより管理しやすいセットに効率的に絞り込むことであり、必ずしもすぐに最終的な結果セットに到達することではありません。繰り返しになりますが、100%の正確さのために、これはプロセスの最終ステップにはなりません。このシナリオでは暗号化の目的でハッシュを使用していないため、MD5などのアルゴリズムは正常に機能します。
「精度」の目的でSHA-xアルゴリズムに移行することを正当化するのは非常に難しいでしょう。なぜなら、ビジネスがMD5のごくわずかな衝突の可能性について気が狂うなら、チャンスも彼らが気が狂うからです。 SHA-xアルゴリズムも完全ではありません。彼らは、わずかに不正確な条件を満たしているか、クエリが100%正確であり、関連する技術的な意味合いを満たしていることを義務付ける必要があります。もしあなたがMD5の代わりにSHA-xを使用したことを知っていて、CEOが夜よく眠れたら、それでいいと思う。この場合、技術的な観点からはあまり意味がありません。
パフォーマンスについて言えば、テーブルがほとんど読み取りであり、結合結果が頻繁に必要な場合は、インデックスビューを実装して、要求されるたびに結合全体を計算する必要をなくすことを検討してください。もちろん、それと引き換えにストレージを使用しますが、特に100%の精度が必要な場合は、パフォーマンスを改善するために十分な価値があるかもしれません。
長い文字列値のインデックスの詳細については、単一のテーブルに対してこれを行う方法の例を紹介し、この質問のシナリオ全体を試みる際に考慮すべき事項を示す記事を公開しました。