HASHBYTES
Функція приймає тільки до 8000 байт в якості вхідних даних. Оскільки ваші входи потенційно більше, ніж це, дублікати в діапазоні поля, що хеширується , спричинить зіткнення, незалежно від обраного алгоритму. Уважно розгляньте коло даних, які ви плануєте хеш - використання перших 4000 символів - очевидний вибір, але може бути не найкращим вибором для ваших даних.
У будь-якому випадку, через те, що таке хеш-функція, навіть якщо входи складають 8000 байт або менше, єдиний спосіб забезпечити 100% правильність результатів - порівняти базові значення в якийсь момент (читайте: спочатку не обов’язково ). Період.
Бізнес буде диктувати, чи потрібно 100% точність. Це скаже вам , що або (а) порівняння базових значень потрібно , або (б) слід розглядати НЕ порівнюючи базові значення - скільки точність повинна бути торгуються від для підвищення продуктивності.
Хоча хеш-зіткнення можливі в унікальному наборі вводу, вони нескінченно рідкісні, незалежно від обраного алгоритму. Вся ідея використання хеш-значення в цьому сценарії полягає в тому, щоб ефективно звузити результати об'єднання до більш керованого набору, а не обов’язково одразу доходити до остаточного набору результатів. Знову ж таки, для 100% точності це не може бути завершальним кроком у процесі. Цей сценарій не використовує хешування для криптографії, тому алгоритм, такий як MD5, буде добре працювати.
Мені було б вкрай важко виправдати перехід до алгоритму SHA-x для цілей "точності", тому що якщо бізнес збирається врізатися з приводу мінімальних можливостей зіткнення MD5, швидше за все, вони також зроблять це алгоритми SHA-x також не є ідеальними. Вони або повинні змиритися з незначною неточністю, або вимагають, щоб запит був на 100% точним і жив з відповідними технічними наслідками. Я гадаю, якщо генеральний директор спить краще вночі, знаючи, що ви використовували SHA-x замість MD5, ну, добре; з технічної точки зору це все ще не означає багато.
Якщо говорити про ефективність, якщо таблиці здебільшого читаються, а результат з'єднання потрібен часто, розгляньте можливість застосування індексованого виду, щоб усунути необхідність обчислювати весь приєднання щоразу, коли це вимагається. Звичайно, ви торгуєте цим сховищем, але, можливо, варто його покращити, особливо якщо потрібна 100% точність.
Для подальшого читання щодо індексації значень довгих рядків я опублікував статтю , в якій описує приклад того, як це зробити для однієї таблиці, і подає речі, які слід враховувати при спробі повного сценарію в цьому питанні.