0

列を持つテーブル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;

これに対する他の最適な解決策はありますか? 挿入をはるかに高速に実行できる場所。

ありがとう

4

1 に答える 1