加入收藏 | 设为首页 | 会员中心 | 我要投稿 百客网 - 百科网 (https://www.baikewang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql分页原理及方法

发布时间:2022-10-06 11:09:18 所属栏目:MySql教程 来源:
导读:  mysql分页原理及方法

  1 mysql分页原理

  假设数据库表student存在13条数据。

  语句1:select * from student limit 9,4

  语句2:slect * from student limit 4 offset 9

  //
  mysql分页原理及方法
 
  1 mysql分页原理
 
  假设数据库表student存在13条数据。
 
  语句1:select * from student limit 9,4
 
  语句2:slect * from student limit 4 offset 9
 
  // 语句1和2均返回表student的第10、11、12、13行
 
  //语句1中的4表示返回4行,9表示从表的第十行开始
 
  //语句2中的4表示返回4行,9表示从表的第十行开始
 
  通过limit和offset 或只通过limit可以实现分页功能
 
  假设 numberperpage 表示每页要显示的条数
 
  pagenumber表示页码
 
  那么 返回第pagenumber页,每页条数为numberperpage的sql语句写法为
 
  语句3:select * from studnet limit (pagenumber-1)*numberperpage,numberperpage
 
  语句4:select * from student limit numberperpage offset (pagenumber-1)*numberperpage
 
  2 mysql limit优化
 
  MySQL limit 操作常用于程序中的分页,但是如果你没有了解过limit的机制和相关优化原理,一旦数据量上升,程序的性能将会惨不忍睹,所以下面总结几种mysql关于limit优化实例,每个实例后对应都会有演示。(演示的数据来自15年暑期实习的p2p流量数据,表数据量约300W行)
 
  1、sql中会范的错误
 
  [sql] view plain copy
 
  select XXX from tableA limit 1000000,10;
 
  上面的语句是取1000000后面的10条记录,但是这样会导致mysql将1000000之前的所有数据全部扫描一次,大量浪费了时间。截图是我扫描100W数据花费的时间,大概是2S多
 
  这在程序中肯定是不可忍受的。
 
  对于mysql,优化limit最重要的一点就是尽量先用主键id的索引到起始位置,然后再截取需要的行数。
 
  2、优化方式
 
  (1)使用记录主键的方式进行优化
 
  limit最大的问题在于要扫描前面不必要的数据,所以可以先对主键的条件做设定,然后记录住主键的位置再取行。
 
  [sql] view plain copy
 
  select * from p2p_20131230 where main_id > 1000000 order by main_id limit 10;
 
  这样执行的结果如下所示mysql原理,比没有优化前提升了很多倍。
 
  (2)使用子查询进行查询:
 
  [sql] view plain copy
 
  select * from p2p_20131230 where main_id >= (select main_id from p2p_20131230 limit 1000000,1) limit 10;
 
  (3) 使用between关键字
 
  如果在主键id是有序不变的情况下,还可以手动计算between的前后两个条件进行查询,这里我就不上代码了。
 
  总结一下,上面的集中方法都是利用mysql的主键索引进行优化,当然应用中通常很难直接获得索引,基本上都是格局where后的某个条件,这个时候就可以先用条件查询出主键id,然后再用上述方式获取结果集即可。
 

(编辑:百客网 - 百科网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!