bootstrap table无法服务器分页_MySQL百万数据,你如何用分页来查询数据

本文探讨了在大数据量下MySQL分页查询效率下降的问题,通过两种改进方案实现了显著的性能提升。首先,通过子查询筛选ID字段而非全表数据,减少了查询开销。其次,创建了一个只包含关键字段的索引表news2,使用InnoDB引擎进一步优化查询时间。最终,将查询时间从7秒降低到0.2秒,证明了这些优化策略的有效性。
摘要由CSDN通过智能技术生成

在开发过程中我们经常会使用分页,核心技术是使用limit进行数据的读取,在使用limit进行分页的测试过程中,得到以下数据:

select * from news order by id desc limit 0,10耗时0.003秒select * from news order by id desc limit 10000,10耗时0.058秒select * from news order by id desc limit 100000,10 耗时0.575秒select * from news order by id desc limit 1000000,10耗时7.28秒

我们惊讶的发现mysql在数据量大的情况下分页起点越大查询速度越慢,100万条起的查询速度已经需要7秒钟。这是一个我们无法接受的数值!

改进方案 1

select * from news where id >  (select id from news order by id desc  limit 1000000, 1)order by id desc limit 0,10

查询时间 0.365秒,提升效率是非常明显的!!原理是什么呢???

我们使用条件对id进行了筛选,在子查询 (select id from news order by id desc limit 1000000, 1) 中我们只查询了id这一个字段比起select * 或 select 多个字段 节省了大量的查询开销!

改进方案2

适合id连续的系统,速度极快!

select * from news where id  between 1000000 and 1000010 order by id desc

不适合带有条件的、id不连续的查询。速度非常快!

百万数据分页的注意事项

接上一节,我们加上查询条件:

select id from news where cate = 1order by id desc limit 500000 ,10 

查询时间 20 秒

好恐怖的速度!!利用上面方案进行优化:

select * from newswhere cate = 1 and id > (select id from news where cate = 1 order by id desc limit 500000,1 ) order by id desc limit 0,10 

查询时间 15 秒

优化效果不明显,条件带来的影响还是很大!在这样的情况下无论我们怎么去优化sql语句就无法解决运行效率问题。

那么换个思路:建立一个索引表,只记录文章的id、分类信息,我们将文章内容这个大字段分割出去。

表 news2 [ 文章表 引擎 myisam 字符集 utf-8 ]

-------------------------------------------------

id int 11 主键自动增加

cate int 11 索引

在写入数据时将2张表同步,查询是则可以使用news2 来进行条件查询:

select * from newswhere cate = 1 and id > (select id from news2 where cate = 1 order by id desc limit 500000,1 ) order by id desc limit 0,10

注意条件 id > 后面使用了news2 这张表!

运行时间 1.23秒,我们可以看到运行时间缩减了近20倍!!数据在10万左右是查询时间可以保持在0.5秒左右,是一个逐步接近我们能够容忍的值!

但是1秒对于服务器来说依然是一个不能接受的值!!还有什么可以优化的办法吗??

我们尝试了一个伟大的变化:

将 news2 的存储引擎改变为innodb,执行结果是惊人的!

select * from newswhere cate = 1 and id > (select id from news2 where cate = 1 order by id desc limit 500000,1 ) order by id desc limit 0,10

只需要 0.2秒,非常棒的速度。


到了这一步,我们的分页优化完毕,显然是有很大的效果的。你自己可以测试一下!

领取方式:点赞关注小编后私信【资料】获取资料领取方式!

部分资料展示:

e5d0c7e7b49b5b4b792e0512e74e51d8.gif
fbaabf6ae2dd7086bd7048cf769aef54.gif
40e48faa4bd5c86f5fbff431d9cb2098.png
1983304f9cbb061953fed9542a05523c.png
9d97b2a9e9bd4627190ed89645da0b38.png

领取方式:点赞关注小编后私信【资料】获取资料领取方式!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值