数据结构 :
主表(5亿):
创建表
USER_DETAILS
(
visitor_id
varchar(50) 默认为空,partition_id INT,
related_text 长文本,
creation_date
时间戳 DEFAULT CURRENT_TIMESTAMP,主键 (
visitor_id
,partition_id) )引擎=TokuDB
按列表分区(partition_id)(
(0) 引擎 = TokuDB 中的分区 p0 值,
(1) ENGINE = TokuDB 中的分区 p1 值,
(2) ENGINE = TokuDB 中的分区 p2 值,
(3) ENGINE = TokuDB 中的分区 p3 值,
(4) ENGINE = TokuDB 中的分区 p4 值,
(5) ENGINE = TokuDB 中的分区 p5 值,
(6) ENGINE = TokuDB 中的分区 p6 值,
(7) ENGINE = TokuDB 中的分区 p7 值,
(8) ENGINE = TokuDB 中的分区 p8 值,
(9) ENGINE = TokuDB 中的分区 p9 值;
中间表(10-20 百万):
创建表
USER_DETAILS_INTERMEDIATE
(
id
bigint(20) NOT NULL AUTO_INCREMENT,visitor_id` varchar(50) DEFAULT NULL,
partition_id
int(11) 默认空值,
related_text
长文本,主键(id
));
问题 :
当我将数据从中间表传输到主表时花费了太多时间。
我尝试了以下解决方案:
解决方案1:
替换成 USER_DETAILS(visitor_id,partition_id,json_list)
选择 visitor_id ,partition_id ,related_text
FROM USER_DETAILS_INTERMEDIATE
解决方案 2(在循环中运行以下语句:每个循环 10000 行):
替换成 USER_DETAILS(visitor_id,partition_id,json_list)
选择 visitor_id ,partition_id ,related_text
FROM USER_DETAILS_INTERMEDIATE
WHERE id 在 var_min_id 和 var_max_id 之间;
以上查询都需要时间。
有没有另一种方法来改善这个..?