Тут-то и задумался: а не будут ли лишними эти переконвертации и может проще и быстрее сделать в дополнение к автоинкрементальному полю уникальный индекс по этому варчару и выборку непосредственно по нему?
Или это ночной бред и быстрее первичного индекса по бигинту нет ничего аналогичного?
Спустя 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. Воспалённый и отравленный вином мозг подсказывает, что сравнивать по длине строку и число некорректно, но интересуют мнения более трезвых людей
Вопрос топика только в том: будет ли быстрее индекс по varchar(50), чем по bigint, при условии, что на больших цифрах длина строки разнится сильно и с не в пользу bigint'a. Воспалённый и отравленный вином мозг подсказывает, что сравнивать по длине строку и число некорректно, но интересуют мнения более трезвых людей

Спустя 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.
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 написал(а):
Во, именно такой ответ ждал. Спасибо