1

データ構造 :

メインテーブル (5 億) :

テーブルの作成USER_DETAILS(

visitor_idvarchar(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(

idbigint(20) NOT NULL AUTO_INCREMENT、

Visitor_id` varchar(50) DEFAULT NULL,

partition_idint(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 ;

上記のクエリには両方の時間がかかります。

これを改善する別の方法はありますか..?

4

0 に答える 0