HASHBYTES
Функция принимает только до 8000 байт в качестве входных данных. Потому что ваши входы потенциально больше , чем, дублирует в пределах поля , которое получает хешировано будет вызывать коллизии, независимо от выбранного алгоритма. Тщательно продумайте диапазон данных, которые вы планируете хешировать - использование первых 4000 символов является очевидным выбором, но, возможно, не лучшим выбором для ваших данных.
В любом случае, из-за того, что представляет собой хеш-функция, даже если входные данные имеют размер 8000 байт или менее, единственный способ обеспечить 100% правильность результатов - это сравнить базовые значения в некоторой точке (читай: не обязательно сначала ). Период.
Бизнес будет диктовать, требуется ли точность 100%. Это скажет вам , что либо (а) сравнение базовых значений требуется , или (б) следует рассматривать не сравнивая базовые значения - сколько точность должна быть торгуемые от для повышения производительности.
Хотя коллизии хэшей возможны в уникальном входном наборе, они бесконечно малы, независимо от выбранного алгоритма. Вся идея использования значения хеш-функции в этом сценарии состоит в том, чтобы эффективно сузить результаты объединения до более управляемого набора, а не обязательно сразу получать окончательный набор результатов. Опять же, для 100% точности это не может быть последним шагом в процессе. Этот сценарий не использует хеширование для криптографии, поэтому алгоритм, такой как MD5, будет работать нормально.
Мне было бы крайне трудно оправдать переход к алгоритму SHA-x для «точности», потому что, если бизнес собирается волноваться о минимальных возможностях коллизий в MD5, есть вероятность, что они также будут волноваться, что алгоритмы SHA-x тоже не идеальны. Они либо должны смириться с небольшой неточностью, либо поручить, чтобы запрос был на 100% точным и соответствовал техническим последствиям. Я полагаю, если генеральный директор спит лучше ночью, зная, что вы использовали SHA-x вместо MD5, хорошо, хорошо; это все еще не значит много с технической точки зрения в этом случае.
Говоря о производительности, если таблицы в основном для чтения и часто требуется результат объединения, рассмотрите возможность реализации индексированного представления, чтобы исключить необходимость вычисления всего объединения каждый раз, когда оно запрашивается. Конечно, вы обмениваете хранилище на это, но это может стоить повышения производительности, особенно если требуется 100% точность.
Для дальнейшего чтения по индексированию длинных строковых значений я опубликовал статью, в которой рассматривается пример того, как сделать это для отдельной таблицы, и представлены вещи, которые следует учитывать при попытке полного сценария в этом вопросе.