关于数据量大情况分页在mysql中的使用技巧

 作者:Blue

 上传时间:2017-08-26

 标签: mysql Mysql优化

在实际开发中,分页是一个很普遍的功能。当数据量比较大的情况下,就会出现一些问题,比如查询越靠后,速度将会越来越慢。
先分析下造成这样的原因,大家看看下面一般分页的SQL语句。使用limit在这种语句中查询时候,就相当于你翻书时候规定你必须每次翻页都是必须要重第一页翻到想翻到的页。越往后翻页肯定会越后越慢。

select articles.id,articles.title from articles limit 100000,10;

解决方案有三种方式。
第一种:从实际的业务逻辑上面来分析,一个人进入一个网站,能翻多少页,一般都是翻看最新的数据。所以从这个业务角度去分析,我们可以规定比如只允许翻到100页的位置。谷歌和百度的搜索引擎的查找数据分页就是这样的方式,规定只能翻多少页。
第二种:适用主键id索引来进行进行翻页。如以下sql语句,适用这种方式的前提是不物理删除数据,适用逻辑删除数据,比如添加一个is_delete,当其等于1时为逻辑删除的。在前端显示时也显示该条数据,但是是显示这条数据已经删除。

select articles.id,articles.title from articles where articles.id>100000 limit 10;

第三种:适用延迟关联,也就是先确定这数据存在书的多少页,直接翻到这页。SQL语句如下。

select articles.id,articles.title from articles inner join (select id from limit 100000,10) as temp on articles.id = temp.id;

只是大致的介绍下这个方案,具体的mysql优化姿势还是需要自己系统的去解锁。


欢迎支付宝打赏


   常用下载
  • wkhtmltox 一款将html转换成pdf的软件,laravel有相关支持包  
  • linux一键环境OneinStack(支持lnmp,lamp)