mysql数据库千万级转移经验

1刚开始因为主键是uuid类型刚开始使用的是

SELECT
	* 
FROM
	sqmple LIMIT 500000,1000

刚开始发现在limit第一个数字较小时执行的非常快大约1秒左右,后来在运行到limit第一个数字达到800万是时间已经达到了100秒,

此时这种方法已经不适合,然后搜索发现这种办法是搜索全表的越往后搜索的越慢。

----limit 是进行从前往后进行查询的因为本表一条的数据量就非常大,所以使用limit进行查询时仅仅是查询id属性也会造成效率的降低。

后来在网上发现可以使用

SELECT
	*
FROM
	sample AS a 
WHERE
	id BETWEEN 9999 
	AND 10999

这种方式会使程序更快一下,但是本表使用的id是以uuid进行命名的很显然不是很适合,最后选择建立了一个中间表,单独进行保存id和一个自增id的属性,首先创建一个表然后将sample中的id插入data2表中,对于千万级数据时间会有点长大约一两个小时

INSERT INTO data2 ( NAME ) SELECT
id NAME 
FROM
	sample

然后我们通过查询id再通过id进行查找数据一开始使用的是in后来发现时间依然很慢,查了一下发下in在数据较多时依然会查全表,in只有在数据较少时才会快。最后选择了between and 进行查询发现时间较为稳定

SELECT
	* 
FROM
	sample AS a 
WHERE
	id BETWEEN ( SELECT id FROM att WHERE uid = 30014000 ) 
	AND ( SELECT id FROM att WHERE uid = 30015000 )

三千万数据查询19秒左右是暂时的找到的最好办法了。

后来发现在查询数量较为靠前时效率没有limit效果好,最后在开始时使用的limit,在数据量百万级别是limit时间已经达到100多秒切换回了当前方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值