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