当前位置: 移动技术网 > IT编程>数据库>Mysql > MySQLlimit分页查询数据库

MySQLlimit分页查询数据库

2019年04月19日  | 移动技术网IT编程  | 我要评论
mysqllimit分页查询 - 在查询数据库的时候,由于要查询很大的数据,上百万的级别,往往让出现内存溢出的问题,所以这时候需要分批去取数据库表中的全部数据来进行处理,最简单的

mysqllimit分页查询

- 在查询数据库的时候,由于要查询很大的数据,上百万的级别,往往让出现内存溢出的问题,所以这时候需要分批去取数据库表中的全部数据来进行处理,最简单的方法就是使用分页查询语句:mysql的limit语句是满足这个要求的。
- 先来了解这个用法和原理:mysql limit 子句用法及原理。
- 使用查询语句的时候,经常要返回前几条或者中间某几行数据, limit 子句可以被用于强制 select 语句返回指定的记录数。limit 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。

select * from table   limit [offset,] rows | rows offset offset
  • 1
    • 1

这是两个参数,第一个是偏移量,第二个是数目

select * from table limit 2, 7; // 返回3-9行,偏移7个
select * from table limit 3,1; // 返回第4行
  • 1
  • 2
    • 1
    • 2

一个参数

select * from table limit 3; // 返回前3行,默认是0开始。
  • 1
    • 1
  • 效率:
    mysql中分页都是用的 limit 10000,20这样的方式,这样的下驴是很低的。因为要先扫描1w多行才剔除前面的1w行,返回后面的结果。

    第一部分:看一下分页的基本原理:
    mysql explain select * from message order by id desc limit 10000, 20
    ******* 1. row ****
    id: 1
    select_type: simple
    table: message
    type: index
    possible_keys: null
    key: primary
    key_len: 4
    ref: null
    rows: 10020
    extra:
    1 row in set (0.00 sec)
    *******end********
      对上面的mysql语句说明:limit 10000,20的意思扫描满足条件的10020行,扔掉前面的10000行,返回最后的20行,每次查询需要扫描超过1w行,性能肯定大打折扣。
      增加where语句,缩小范围:
      
      如果limit m,n不可避免的话,要优化效率,只有尽可能的让偏移量m小一下
      

    select * from table where id >=2500 order by auto_id asc limit 0,20
    • 1
      • 1

    这句表示从id2500 开始,从0行开始以偏移量20 查询下去。

    select * from table where auto_id <2500 order by auto_id desc limit 40,20
    • 1
      • 1
    • 原理还是一样,记录住当前页id的最大值和最小值,计算跳转页面和当前页相对偏移,由于页面相近,这个偏移量不会很大,这样的话m值相对较小,大大减少扫描的行数。
        
    • 其实传统的limit m,n,相对的偏移一直是第一页,这样的话越翻到后面,效率越差,而上面给出的方法就没有这样的问题。
    • from:https://blog.csdn.net/agly_clarlie/article/details/53185750

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网