У меня есть таблица Temp_load с колонками:Ошибки вставка 100 млн записи в таблицах MYSQL
key bigint(19) UN PK
plane_key bigint(20) PK
locat_key bigint(20) PK
time_period_key bigint(19) UN PK
business_unit_key bigint(19) UN
curret_allocated tinyint(1)
value float
valid_ind int(11)
last_updated datetime
выше, столбец таблицы, который Temp_load является содержащимся в нем.
я пытаюсь вставить данные в эту таблицу, используя ниже запроса
INSERT INTO <Schema_name>.`Temp_load`
(key,
plane_key,
locat_key,
time_period_key,
business_unit_key,
curret_allocated,
value)
(SELECT DISTINCT 1,
plane_key,
locat_key,
1,
CASE
WHEN current_area = 'HEALTH' THEN 1
WHEN current_area = 'BEAUTY/PERSONAL' THEN 3
WHEN current_area = 'GM' THEN 2
WHEN current_area = 'CONSUMABLES' THEN 4
end,
current_flag,
opt_metric_1
FROM staging.curves
WHERE opt_metric_1 IS NOT NULL
AND current_area IS NOT NULL);
Таблица Источник оказывает 29 миллионов записей в нем. Вышеупомянутый элемент вставки работает более 5 часов и продолжает работать. Я делаю вставку из 29 миллионов в один ход, как это из той же таблицы, мне нужно сделать в 3 раза больше вставки на другой столбец.
Когда я пытаюсь загрузить с помощью LOAD DATA INFILE, он бросает ERROR 1205 (HY000): превышение ожидания ожидания ожидания ожидания; попробуйте перезапустить транзакцию Я также попытался увеличить innodb_lock_wait_timeout до 120, но все же мы столкнулись с проблемой.
Также перед загрузкой i ave отключен ниже флагов.
SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET AUTOCOMMIT = 0;
Есть ли у нас какие-либо другие оптимальные решения для этого? где вставка может быть выполнена гораздо быстрее.
Благодаря
Если целостность входных данных можно предположить, вы можете попробовать удалить индексы из таблицы назначения заранее, и только добавить снова после вставки. Индексы могут замедлять массивные вставки данных, поскольку данные индекса должны быть переписаны часто. Только добавление индексов впоследствии может быть способом ускорить процесс. (Однако никаких гарантий нет.) – CBroe