Mysql 深分页

Mysql 深分页 优化方案之一

数据:单表数据25万条。

1.基本分页:耗时0.019秒

select * from order_info limit 0,20

2.深度分页:耗时10.236秒

select * from order_info limit 200000,20

3.深度ID分页:耗时0.052秒

提示:如果这一步很慢,count(1) 查询总数应该也会很慢-解决方式:请为主键加上unique索引。

  • 主键ID字段:id
select id  from order_info limit 200000,20

4.两步走深度分页:耗时0.049秒+0.017秒

基于第三步的缺陷(只能查出ID信息),我们可以先查出分页数据的ID,在根据ID查询数据。

select id from order_info LIMIT 200000,20
select * from order_info where id in (
'330681650000202108180227345510',
'330681650000202108171031534500',
'330681650000202108190251532141',
'330681650000202108200246376830',
'330681650000202108210229398665',
'330681650000202108220236113895',
'330681650000202108230230034133',
'330681650000202108231017279739',
'330681650000202108231043456276',
'330681650000202108231051404340',
'330681650000202108240237397251',
'330681650000202108250221489228',
'330681650000202108250241536726',
'330681650000202108260253039326',
'330681650000202108270216016138',
'330681650000202108280234013754',
'330681650000202108290230029720',
'330681650000202108300255579204',
'330681650000202108310234184991',
'330681650000202109010237315937'
);

两步合成一步SQL耗时:11.9秒;这一步着实出乎了我的意料。

5.一步走深度分页:耗时0.05秒

这一步是对第四步的优化,毕竟两条SQL还需要码代码。利用join 两条SQL合成一条。

SELECT
	* 
FROM
	order_info  a
	JOIN ( SELECT id FROM order_info LIMIT 200000, 20 ) b ON a.id= b.id

6.集成BeanSearcher框架

原理是使用了BeanSearchersql拦截器对SQL进行拦截改造。

7.如果对数据插入的要求很高,比如每秒插入十多条数据,还是每条逐个插入,时间久了必然数据量非常大。这里还有一个方法可以试一试,那就是牺牲事务而获取性能,对不重要的数据可以这么做。将InnoDB引擎改为MyISAM引擎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值