目录
1、背景
表中有一个主键字段,主键ID是有时间特性,按照时间升序增长的,可以认为ID是雪花算法生成的ID,目前表中有1亿条数据,我们需要把这1亿条数据同步到ES中。
2、技术方案
我们将全表数据看成是一个大的数据集,从逻辑上进行分页,每页每页的数据进行同步。这是一个比较粗糙的技术方案,真正执行过程中,会发现也存在深度分页问题,每页
显示100条数据,第1页查询sql与执行计划,如下:
SELECT * FROM homework_wk_region order by wk_region_id desc LIMIT 100 OFFSET 100000;
第1000页查询sql与执行计划,如下:
SELECT * FROM homework_wk_region order by wk_region_id desc LIMIT 100 OFFSET 100000;
3、技术方案修正
3.1 记录上一页查询的最小的主键Id
select min(wk_region_id) from
(
SELECT wk_region_id FROM homework_wk_region order by wk_region_id desc LIMIT 100 OFFSET 100000
) as t;
// 查询结果: 1277546880860127232
3.2 改写分页sql
SELECT * FROM homework_wk_region where wk_region_id < 1277546880860127232 order by wk_region_id desc LIMIT 100 ;
下面是它的执行计划:
与之前的执行计划相比,优化效果是比较明显的。