我有带有列的表 Temp_load:
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);
Source 表中有 2900 万条记录。上面的插入语句运行了 5 个多小时并且还在运行。我正在从同一张表中一次性插入 2900 万,我需要在不同的列上再插入 3 倍。
当我尝试使用 LOAD DATA INFILE 加载时,它会抛出 ERROR 1205 (HY000): Lock wait timeout exceeded; 尝试重新启动事务我也尝试将 innodb_lock_wait_timeout 增加到 120,但我们仍然面临问题。
同样在加载之前,我已在标志下方禁用。
SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET AUTOCOMMIT = 0;
我们还有其他最佳解决方案吗?插入可以以更快的方式完成。
谢谢