Каков оптимальный размер индекса префикса для URL (MySQL) - PullRequest
1 голос
/ 04 августа 2020

Я собираю несколько миллионов строк данных, содержащих URL-адреса. Для их дедупликации мне нужно найти существующий URL-адрес перед вставкой новой строки. Следовательно, я хотел бы создать индекс для этого столбца.

Какой размер префикса лучше всего, зная, что большинство URL-адресов начинаются с http:// или https://?

Ответы [ 2 ]

3 голосов
/ 05 августа 2020

Для нескольких миллионов строк практически нет шансов, что MD5(URL) будет иметь случайное столкновение. Это 32 шестнадцатеричные цифры (CHAR(32) CHARACTER SET ascii). Или лучше было бы UNHEX(...) и поместить его в BINARY(16).

Затем добавить индекс UNIQUE в этот столбец.

Какую версию вы используете? В некоторых более новых версиях MariaDB есть что-то подобное.

1 голос
/ 06 августа 2020

Есть два способа добавить индекс к длинной строке:

  1. добавить индекс для crc32 (URL-адреса), просто добавьте столбец с именем crc32_urls и создайте для него индекс. URL-адреса имеют одинаковый результат по crc32 (URL-адреса), поэтому каждый раз при поиске вы должны запускать следующее:
SELECT * FROM table WHERE crc32_urls = xxx AND urls = xxx
использовать индекс префикса. Для предположения, какой должна быть длина префикса. Вы можете вычислить по
SELECT COUNT(DISTINCT urls)/COUNT(*) FROM table

по сравнению с

SELECT COUNT(DISTINCT left(urls, x))/COUNT(*) FROM table

x - это длина, которую вы Когда два числа близки, выберите минимальную длину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...