Проще говоря, чем длиннее строка и чем больше похожих строк, тем дольше они будут сравниваться (рассмотрим строку длиной 1000 символов, где единственным отличием является последний символ, вы можете увидеть, как долго он будет принять до того, как рутина обнаруживает несоответствие).
Но давайте сопоставим эту стоимость сравнения длинной строки со стоимостью их размещения на диске.
Индексы хранятся в деревьях B +, которые представляют собой сбалансированные деревья с переменным числом узлов и где каждый узел связан с другим (a -> b -> c). Это дает нам две возможности: быстрый поиск путем обхода дерева, а затем быстрый доступ в порядке дерева к другим узлам (как только вы найдете «a», легко найти «b», затем «c» и т. Д.).
Индексы располагаются на страницах диска, и, как правило, чем больше узлов вы можете втиснуть в страницу индекса, тем меньше общая высота дерева индекса B +. Чем ниже высота дерева, тем быстрее вы сможете найти конкретную строку, так как обычно вы проходите высоту дерева (поскольку оно сбалансировано), чтобы добраться до любого одного конечного узла.
Чем ниже высота, тем меньше попаданий на диск вы должны сделать. Если у вас есть дерево высотой 4, то для достижения любого случайного узла требуется загрузка 4 страниц индекса в ОЗУ, а это 4 обращения к диску. Таким образом, старшее дерево 4 "вдвое эффективнее" (для различных значений "удвоено"), чем старшее дерево 8.
Кроме того, чем больше вы можете поместить на страницу индекса, тем меньше попаданий вам понадобится, если вы начнете выполнять итерации по узлам. Если ваши узлы содержат 10 ключевых значений, загрузка ста строк обойдется вам в 10 обращений к индексной странице, тогда как если он содержит только 5 на узел, вы получите удвоенное число попаданий на индексный диск.
Обратите внимание, что вы получаете геометрическую прогрессию с точки зрения количества записей, необходимых для добавления нового слоя в дерево. (т. е. разница между 5-значным узлом и 10-значным узлом не в два раза больше записей.)
Так вот, в этом и есть ценность иметь маленькие ключи - много поклонников в ваших индексных деревьях.
Имейте в виду, с хешем вам все равно придется делать "где хэш = и url = '...'".
Но это действительно сводится к вашим шаблонам доступа к данным, правда. Насколько занята БД, какие запросы вы делаете, сколько оперативной памяти у вас для кэширования страниц индекса и т. Д.
Удар по индексу, чтобы найти вашу начальную строку, может даже не оказаться на радаре времени вашего запроса.
Ключевым выводом является то, что количество записей не имеет значения, но веер из дерева индексов имеет значение. Например, если у вас есть индексный узел 1 КБ и 4-байтовый индекс (длинное целое), вы можете получить 250 узлов на индекс (очень упрощенно), а трехслойное дерево может получить, что, 16 миллионов строк в пределах одного 3 глубоких дерева - любая из 16 миллионов строк в 3 попаданиях на диск.