Хорошо, 2 балла.
Функция SQL CHECKSUM не создает хеш-значения. Это фактически вычисляет значение CRC. Это не очень хороший кандидат, чтобы основывать проверку хэша, потому что будет относительно большое количество коллизий. Вы должны проверить функцию hash_bytes, если хотите использовать функцию хеширования.
Во-вторых, вы на самом деле не создаете хеш-индекс. Вы создаете обычное b-дерево для хеш-значения, поэтому время поиска будет точно таким же, как и для любого другого индекса b-дерева в типе данных аналогичного размера.
Существует вероятность того, что вы могли бы получить небольшую производительность, используя CRC или хеш с длинным значением varchar, чтобы можно было сравнивать меньшее количество байтов, но при сравнении строк проверяется только столько байтов, сколько необходимо, до первый символ, который не совпадает, и если вы совпадаете с хэшированным значением, вам все равно нужно дважды проверить фактическое значение. Таким образом, если у вас нет много очень похожих строк, вы, вероятно, в конечном итоге будете сравнивать БОЛЬШЕ байтов, используя хэш (или CRC).
Короче говоря, я не думаю, что это разумный план, но, как и в случае всех оптимизаций, вы должны проверить его в своем конкретном случае, а затем принять решение. Мне было бы интересно увидеть ваши результаты, если вы захотите опубликовать их. И я не верю, что есть более быстрый способ найти строку на сервере SQL, чем с помощью кластерного индекса.
Если вам не безразлично, Ingres (от CA) может создать хеш-индексы, которые затем достигнут O (1). могут быть и другие RDBM, которые также поддерживают истинные хеш-индексы.