У меня есть таблица БД, в которой мы храним много хешей MD5 (и да, я знаю, что они не на 100% уникальны ...), где у нас есть много запросов сравнения этих строк. Эта таблица может стать довольно большой и содержать более 5 миллионов строк.
У меня такой вопрос: разумно ли хранить данные в виде шестнадцатеричных строк или мне следует преобразовать шестнадцатеричное значение в двоичное или десятичное для лучшего запроса?


Двоичный код, вероятно, будет быстрее, поскольку с текстом вы используете 8 бит (полный символ) для кодирования 4 бита данных. Но я сомневаюсь, что вы действительно заметите большую разницу, если она вообще есть.
Там, где я нахожусь, у нас очень похожая таблица. Он содержит тексты диктовок от врачей для выставления счетов в текстовом столбце (все еще на сервере sql 2000). Мы приближаемся к четырем миллионам записей, и нам нужно иметь возможность проверять наличие дубликатов, когда врач продиктовал одно и то же дважды для целей проверки и соответствия. Диктовка может запускать несколько страниц, поэтому у нас также есть столбец хэша, который заполняется при вставке с помощью триггера. Столбец имеет тип char (32).
С двоичными данными неудобно работать вручную или если вам нужно выгрузить данные в текстовый файл или еще что-то.
Просто поместите индекс в столбец хеша, и все будет в порядке.