Фон:
- У меня есть короткий список строк.
- Количество строк не всегда одно и то же, но почти всегда порядка "горстки"
- В нашей базе данных будут храниться эти строки во 2-й нормализованной таблице
- Эти строки заменяются никогда после их записи в базу данных.
Мы хотим иметь возможность быстро сопоставлять эти строки в запросе без удара производительности при выполнении большого количества объединений.
Поэтому я собираюсь хранить хэш-код всех этих строк в основной таблице и включать его в наш индекс, поэтому соединения обрабатываются только базой данных, когда хеш-код соответствует.
Итак, как мне получить хороший хэш-код? Я мог:
- Xor хэш-коды всей строки вместе
- Xor с умножением результата после каждой строки (скажем, на 31)
- Соедините всю строку вместе, затем получите hashcode
- Другой способ
Так что думают люди?
В конце концов я просто конкатенирую строки и вычисляю хэш-код для конкатенации, поскольку он прост и достаточно хорошо работает.
(Если вам интересно, мы используем .NET и SqlServer)
Ошибка!, Ошибка!
Цитата из правил и правил для GetHashCode Эрика Липперта
Документация для Заметки System.String.GetHashCode в частности, что два идентичных строки могут иметь разные хэш-коды в разных версиях CLR и на самом деле они это делают. Не хранить строку хэши в базах данных и быть одинаковыми навсегда, потому что они не будет.
Так что String.GetHashcode() не должен использоваться для этого.