同步一张大表技术实现方案

目录

1、背景

2、技术方案

3、技术方案修正

3.1 记录上一页查询的最小的主键Id

3.2 改写分页sql

4 参考资料


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  ;

下面是它的执行计划:

与之前的执行计划相比,优化效果是比较明显的。

4 参考资料

 Deep paging optimization of MySQL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李桥s2008100262

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值