列を持つテーブル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);
ソース テーブルには 2,900 万のレコードが含まれています。上記の挿入ステートメントは 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;
これに対する他の最適な解決策はありますか? 挿入をはるかに高速に実行できる場所。
ありがとう