У меня есть 2 базы данных, и мне нужно связать информацию между двумя большими таблицами (более 3 миллионов записей в каждой, постоянно растущих). В первой базе данных есть таблица «страницы», в которой хранится различная информация о веб-страницах, а также URL-адрес каждой из них. Столбец «URL» представляет собой varchar (512) и не имеет индекса.
Вторая база данных имеет таблицу 'urlHops', определенную как:
CREATE TABLE urlHops
( dest
varchar(512) NOT NULL, src
varchar(512) DEFAULT NULL, timestamp
timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, KEY dest_key
(dest
), KEY src_key
(src
)) ENGINE=InnoDB DEFAULT CHARSET=latin1
Теперь мне нужно в основном выдавать (эффективно) такие запросы: select p.id,p.URL from db1.pages p, db2.urlHops u, где u.src=p.URL и u.dest=?
Сначала я думал добавить индекс по страницам(URL). Но это очень длинный столбец, и я уже делаю много INSERT и UPDATE для одной и той же таблицы (намного больше, чем количество SELECT, которое я бы сделал, используя этот индекс).
Другие возможные решения, которые я подумал: -добавление столбца на страницы, сохранение хэша md5 URL-адреса и его индексация; таким образом я мог выполнять запросы, используя md5 URL-адреса, с преимуществом индекса в меньшем столбце. - добавление другой таблицы, которая содержит только идентификатор страницы и URL-адрес страницы, индексирование обоих столбцов. Но это, возможно, пустая трата места, имеющая только то преимущество, что не замедляет вставки и обновления, которые я выполняю на «страницах».
Я не хочу замедлять вставки и обновления, но в то же время я смогу эффективно выполнять запросы по URL-адресу. Любой совет? Моя главная забота — производительность; если нужно, трата места на диске не проблема.
Спасибо! С уважением
Давиде