[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Индекс по инту или короткой строке
Nikitian
Столкнулся с задачей реализации сокращалки ссылок. Для сокращения выбрал вариант загона ссылки в бд и конвертации автоинрементального id в 64-ичную систему исчисления. Что-то типа "100->1E", "1000->u8", "9000->2sq" и т.д. Соответственно при запросе подобной ссылки будет обратная конвертация в десятичную сиситему и запрос из бд по первичному индексу.
Тут-то и задумался: а не будут ли лишними эти переконвертации и может проще и быстрее сделать в дополнение к автоинкрементальному полю уникальный индекс по этому варчару и выборку непосредственно по нему?
Или это ночной бред и быстрее первичного индекса по бигинту нет ничего аналогичного?



Спустя 20 минут, 4 секунды (14.06.2012 - 23:27) redreem написал(а):
я б нагенерил 100500 md5 хешей от чего-нибудь, забрал бы последние 4-6 символов от хэша, записал бы эти записи в таблице, проверил на уникальность, удалил дубликаты и каждое новое сокращение для ссылки тупо сопоставлял с очередной незанятой записью.

Спустя 6 минут, 47 секунд (14.06.2012 - 23:34) Nikitian написал(а):
Зачем? Вариант со сменой системы счисления используется наверно во всех сокращалках: длина кода регулируется автоматически от самого короткого, нет необходимости лишний раз проверять уже наличие в базе такого кода или генерить какие-то кучи.
Вопрос топика только в том: будет ли быстрее индекс по varchar(50), чем по bigint, при условии, что на больших цифрах длина строки разнится сильно и с не в пользу bigint'a. Воспалённый и отравленный вином мозг подсказывает, что сравнивать по длине строку и число некорректно, но интересуют мнения более трезвых людей smile.gif

Спустя 19 минут, 1 секунда (14.06.2012 - 23:53) forza написал(а):
По мне так, как написано в первом посте и делаются short links.
http://stackoverflow.com/questions/742013/...a-url-shortener
На 64-битных системах корректно переконвертирует ИД такой длины 9223372036854775807 туда и обратно.
На 32-битных - 2147483647, но у меная получилось догнать до 999 999 999 999 999.




Спустя 39 минут, 2 секунды (15.06.2012 - 00:32) FatCat написал(а):
Цитата (Nikitian @ 15.06.2012 - 00:34)
будет ли быстрее индекс по varchar(50), чем по bigint

Будет ощутимо медленнее.
Проверял на базе большого старого форума, в котором уже давно 6-7-значные айдишники пользователей, а имена в среднем 6-7-буквенные; размеры индексов айдишников и имен примерно одинаковые.
SELECT выполняется примерно в 10 раз дольше, ORDER примерно в 100 раз дольше по текстовому полю.

Спустя 2 минуты, 23 секунды (15.06.2012 - 00:34) Nikitian написал(а):
Во, именно такой ответ ждал. Спасибо
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.