내가 열이있는 테이블 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);
소스 테이블이 거기에 2900 만 개 기록을 가지고있다 이하로 사용하여이 테이블에 데이터를 삽입하려합니다. 위의 삽입 통계는 5 시간 이상 실행 중이며 계속 실행 중입니다. 나는 같은 테이블에서 2900 만개의 삽입을하고 있는데 다른 테이블에 3 배 더 삽입해야한다.
LOAD DATA INFILE을 사용하여로드하려고하면 ERROR 1205 (HY000)가 발생합니다. 잠금 대기 시간 초과를 초과했습니다. 트랜잭션을 다시 시작해보십시오. innodb_lock_wait_timeout을 120으로 늘려 보았지만 여전히 문제가 있습니다.
로드하기 전에 플래그 아래에서 사용할 수 없습니다.
SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET AUTOCOMMIT = 0;
다른 최적의 해결책이 있습니까? 삽입이 훨씬 더 빠른 방법으로 수행 될 수 있습니다.
감사
입력 데이터의 무결성을 가정 할 수 있다면, 당신은 사전에 목표 테이블에서 인덱스를 제거하려고 만 추가 할 수 삽입 후에 다시. 인덱스 데이터를 자주 다시 작성해야하기 때문에 인덱스를 사용하면 대용량 데이터 삽입이 느려질 수 있습니다. 이후에 인덱스를 추가하는 것만으로도 작업 속도를 높일 수 있습니다. (보장은 없습니다.) – CBroe