@Evgeny_A

Как хранить и искать URL адреса в MySQL?

Здравствуйте.

У меня в MySQL таблице скопился миллион строк. Одна из колонок таблицы хранит URL адреса. Есть так же скрипт, который должен перед добавлением нового URL в таблицу проверить, нет ли ее уже там, и если есть, то получить первичный ключ этой записи. Проблемы как раз с поиском по этой колонке. Сейчас запрос вида:

cursor.execute("SELECT id FROM urls WHERE url = %s LIMIT 1", [url])


Легко может выполняться 60 секунд. Первое, что пришло в голову это делать индекс, но из за наличия в таблице URL длиннее 768 символов я не могу построить индекс для varchar колонки. Уникальный индекс мне тоже не построить. Кодировка utf8mb4_unicode_ci и повлиять я не это не могу.

Подскажите, как ускорить поиск по 1-2 секунд с учетом, что база таблица будет постоянно расти?
  • Вопрос задан
  • 472 просмотра
Решения вопроса 2
@PapaStifflera
Родился, вырос...
Храните хеш от урла, его легко можно проиндексировать. И ищите тоже по нему.
Ответ написан
Комментировать
@Evgeny_A Автор вопроса
Спасибо Arman и Папа Стифлера за подсказки. Решение, которое подошло полностью:
  1. Добавил в таблицу новый столбец типа varchar
  2. Создал для этой колонки самый обычный индекс
  3. Написал скрипт на Python, который создает hash из URL для каждой строки
  4. Переписал скрипт проверяющий налчие URL в базе так, чтобы он использовал hash

Теперь, чтобы запросы на существование записи вместо 60 секунд, выполняются в среднем меньше чем за секунду для таблицы с > 1 млн. строк.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы