У меня есть две таблицы, которые регулярно объединяются.
Таблица 1 составляет около 1 млн. Строк и растет ежедневно. Таблица два всегда примерно на 200 тысяч меньше, чем Таблица первая. Кроме того, таблица два усекается и заполняется каждую ночь из отчета, загруженного из сторонней службы. Используемый мной запрос UPDATE..JOIN не слишком быстрый, поэтому я ищу возможное решение.
Таблица 1:
#I grow daily and currently am around 1 million rows.
CREATE TABLE table_one(
id INT NOT NULL AUTO_INCREMENT,
sku VARCHAR(30),
other_one VARCHAR(30),
PRIMARY KEY(id)
);
Структура таблицы два:
#I get truncated every night and am about 200k less rows than Table One.
CREATE TABLE table_two(
id INT NOT NULL AUTO_INCREMENT,
sku VARCHAR(30),
other_two INT,
PRIMARY KEY(id)
);
Обратите внимание, что поля other_one и other_two в обеих таблицах служат для демонстрации того, что в каждой таблице есть поля (в основном varchar), кроме id и sku, но на самом деле в каждой таблице много разных столбцов. Я не уверен, что это имеет значение, но SKU уникален на втором столе, но уникален только в 95% случаев на первом столе. Из-за этого уникальность не обеспечивается ни для одной таблицы в MySQL.
Итак, вот мой рабочий процесс и вопрос:
1) В течение дня в Таблицу 1 добавляется куча новых строк.
2) Каждую ночь Таблица 2 усекается (все строки удалены)
3) Отчет загружается от третьего лица в виде файла CSV. Затем этот отчет загружается в таблицу два с помощью команды LOAD DATA LOCAL INFILE.
4) выполняется 3 запроса, которые обновляют данные Таблицы 1 и включают в себя JOIN. Все они очень похожи на это:
UPDATE table_one t1
JOIN table_two t2 ON t2.sku = t1.sku
SET t1.other_one = "Other two was greater than zero!"
WHERE t1.other_one IS NULL AND t2.other_two > 0
Учитывая количество строк, которые у меня есть, выполнение JOIN-соединений между этими двумя таблицами занимает довольно много времени. Мне было любопытно, что с тремя сложными запросами на обновление было бы лучше создать индекс для этих таблиц. Проблема в том, что эти индексы, скорее всего, придется воссоздавать каждую ночь, когда заполняется вторая таблица. Я не знаю, как это может повлиять на скорость населения, и не знаю, какой тип индекса мне следует использовать.