Я знаю, что это старый вопрос, и я бы прокомментировал ответ JNK, но у меня нет представителя для этого ...
Во-первых, поскольку вы используете Nvarchar, вы 'мы должны быть очень осторожны, чтобы убедиться, что строки, которые сравниваются одинаково в хэше сортировки, одинаково;если вы не используете двоичное сопоставление, этого не произойдет, если ваш хэш-алгоритм не поддерживает Unicode или вы сначала не нормализуете свои строки.Unicode допускает различные представления одних и тех же символов, например, É может быть представлен как кодовая точка U + 00C9 или как кодовая точка U + 0045 (E), за которой следует кодовая точка U + 0301 (с острым сочетанием).
Во-вторых, aАлгоритм криптографического хеширования, такой как MD5, не очень хорошо согласуется с необходимостью, где вы хэшируете производительность, а не безопасность.Вам не нужно тратить столько ЦП на каждую вставку и в начале каждого запроса, и вам не нужно, чтобы ваш индексный ключ был таким большим.Вам нужна почти функция .NET StringComparer.GetHashCode (), которая работает быстро, учитывает символы, которые логически, но не двоично равны, и генерирует небольшой хэш-код, который, следовательно, можно сравнивать очень быстро.К сожалению, MS оставляет за собой право изменить этот алгоритм по своему желанию, который бы испортил все сохраненные хэши.В любом случае, если вы собираетесь использовать CLR, я бы порекомендовал украсть соответствующую реализацию GetHashCode из проекта Mono - их библиотеки классов имеют MIT-лицензию, поэтому вы можете отменить их при желании, если сохраните уведомления об авторских правах в источнике.