データ構造 :
メインテーブル (5 億) :
テーブルの作成
USER_DETAILS
(
visitor_id
varchar(50) デフォルト NULL、partition_id INT、
related_text ロングテキスト、
creation_date
タイムスタンプ DEFAULT CURRENT_TIMESTAMP,主キー (
visitor_id
,partition_id) )ENGINE=トクDB
PARTITION BY LIST (partition_id) (
PARTITION p0 VALUES IN (0) ENGINE = TokuDB,
PARTITION p1 VALUES IN (1) ENGINE = TokuDB,
PARTITION p2 VALUES IN (2) ENGINE = TokuDB,
PARTITION p3 VALUES IN (3) ENGINE = TokuDB,
PARTITION p4 VALUES IN (4) ENGINE = TokuDB,
PARTITION p5 VALUES IN (5) ENGINE = TokuDB,
PARTITION p6 VALUES IN (6) ENGINE = TokuDB,
PARTITION p7 VALUES IN (7) ENGINE = TokuDB,
PARTITION p8 VALUES IN (8) ENGINE = TokuDB,
PARTITION p9 VALUES IN (9) ENGINE = TokuDB);
中間テーブル (10 ~ 20 ミリオン):
テーブルの作成
USER_DETAILS_INTERMEDIATE
(
id
bigint(20) NOT NULL AUTO_INCREMENT、Visitor_id` varchar(50) DEFAULT NULL,
partition_id
int(11) デフォルト NULL、
related_text
長文、主キー (id
));
問題 :
中間テーブルからメイン テーブルにデータを転送するときに時間がかかりすぎます。
次の解決策を試しました:
解決策 1:
REPLACE INTO USER_DETAILS(visitor_id, partition_id, json_list)
SELECT ビジター ID 、パーティション ID 、関連テキスト
FROM USER_DETAILS_INTERMEDIATE a
解決策 2 (ループで次のステートメントを実行: ループごとに 10000 行):
REPLACE INTO USER_DETAILS(visitor_id, partition_id, json_list)
SELECT ビジター ID 、パーティション ID 、関連テキスト
FROM USER_DETAILS_INTERMEDIATE a
WHERE id BETWEEN var_min_id AND var_max_id ;
上記のクエリには両方の時間がかかります。
これを改善する別の方法はありますか..?