精华内容
下载资源
问答
  • mysql 大数据量分页优化 假设有一个千万量级的表,取1到10条数据; select * from table limit 0,10; select * from table limit 1000,10; 这两条语句查询时间应该在毫秒级完成; select * from ...

    mysql 大数据量分页优化

     

    假设有一个千万量级的表,取1到10条数据;

    select * from table limit 0,10;
    
    select * from table limit 1000,10;

    这两条语句查询时间应该在毫秒级完成;

    select * from table limit 3000000,10;

    你可能没想到,这条语句执行之间在5s左右;

    为什么相差这么大?

    可能mysql并没有你想的那么智能,比如你要查询 300w开始后面10条数据;mysql会读取300w加10条这么多的数据,只不过 过滤后返回最后10条而已!!!

    那么如果解决这个问题呢;这里总结三种常用方法;

    第一种简单粗暴,就是不允许查看这么靠后的数据,比如百度就是这样的

    最多翻到76页就不让你翻了,这种方式就是从业务上解决;

    第二种方法,在查询下一页时把上一页的行id作为参数传递给客户端程序,然后sql就改成了

    select * from table where id>3000000 limit 10;

    这条语句执行也是在毫秒级完成的,id>300w其实就是让mysql直接跳到这里了,不用依次在扫描全面所有的行

    如果你的table的主键id是自增的,并且中间没有删除和断点,那么还有一种方式,比如100页的10条数据

    select * from table where id>100*10 limit 10;

    最后第三种方法:延迟关联

    我们在来分析一下这条语句为什么慢,慢在哪里。

    select * from table limit 3000000,10;

    玄机就处在这个 * 里面,这个表除了id主键肯定还有其他字段  比如 name  age  之类的,因为select  *  所以mysql在沿着id主键走的时候要回行拿数据,走一下拿一下数据;

    如果把语句改成 

    select id from table limit 3000000,10;

    你会发现时间缩短了一半;然后我们在拿id分别去取10条数据就行了;

    语句就改成这样了:

    select table.* from table inner join ( select id from table limit 3000000,10 ) as tmp on tmp.id=table.id;

    这三种方法最先考虑第一种 其次第二种,第三种是别无选择

     

    转载于:https://www.cnblogs.com/zox2011/p/7822777.html

    展开全文
  • MySQL百万级数据量分页查询方法及其优化 MySQL分页查询优化 重点提一下: 在优化分页语句过程中,一定注意查询的语句添加排序字段,一定自己建表实践,有的可能不一定有效果哦 比如下面这两个语句,返回的结果就...

    参考文章:

    MySQL百万级数据量分页查询方法及其优化

    MySQL分页查询优化

     

     

    重点提一下:

    在优化分页语句过程中,一定注意查询的语句添加排序字段,一定自己建表实践,有的可能不一定有效果哦

    比如下面这两个语句,返回的结果就不是一样的。具体什么原因可以看看我另一篇博客 

    MySQL 默认排序是什么

     SELECT id FROM t_attach_new  LIMIT 2000000, 1;
     SELECT * FROM t_attach_new  LIMIT 2000000, 1;

     

     

     

    展开全文
  • 比如:同样是取10条数据 select* from 表名 limit 10000,10 和 select * from 表名 limit 10,10 但是我们可以看出这两条的数据量还是相差蛮的 1、数据量比较小的时候。 比如: select * from 表名 limit 10,10 ....

     先说结论:在开发中用Java分页需要前端每次传过来最后一条数据的ID  

     

    比如:同样是取10条数据   select * from 表名 limit 10000,10  和   select * from 表名 limit 10,10  但是我们可以看出这两条的数据量还是相差蛮大的

    1、 数据量比较小的时候。

    比如:   select * from 表名 limit 10,10     可以写成如下代码:


     Select * From 表名Where vid >=(Select   列名1  From 表名 Order By 列名1 limit 10,1) limit 1

      2、大数据量比较大的时候。 

    比如: select * from 表名 limit 10000,10   可以写成如下代码:


    Select * From yanxue8_visit Where vid >=(Select vid From yanxue8_visit Order By vid limit 10000,1) limit  10

     

    展开全文
  • MySQL大数据量分页查询方法及其优化
  • MySQL大数据量分页性能优化 mysql大数据量使用limit分页,随着页码的增大,查询效率越低下。 测试实验 1. 直接用limitstart,count分页语句,也是我程序中用的方法: select*fromproductlimitstart,count 当起始...

    MySQL大数据量分页性能优化

    mysql大数据量使用limit分页,随着页码的增大,查询效率越低下。

    测试实验

    1.   直接用limit start, count分页语句, 也是我程序中用的方法:

    select * from product limit start, count
    当起始页较小时,查询没有性能问题,我们分别看下从10, 100, 1000, 10000开始分页的执行时间(每页取20条), 如下:

    select * from product limit 10, 20   0.016秒
    select * from product limit 100, 20   0.016秒
    select * from product limit 1000, 20   0.047秒
    select * from product limit 10000, 20   0.094秒

    我们已经看出随着起始记录的增加,时间也随着增大, 这说明分页语句limit跟起始页码是有很大关系的,那么我们把起始记录改为40w看下(也就是记录的一般左右)                                

    select * from product limit 400000, 20   3.229秒

    再看我们取最后一页记录的时间
    select * from product limit 866613, 20   37.44秒

    难怪搜索引擎抓取我们页面的时候经常会报超时,像这种分页最大的页码页显然这种时
    间是无法忍受的。

    从中我们也能总结出两件事情:
    1)limit语句的查询时间与起始记录的位置成正比
    2)mysql的limit语句是很方便,但是对记录很多的表并不适合直接使用。

    2.   对limit分页问题的性能优化方法

    利用表的覆盖索引来加速分页查询
    我们都知道,利用了索引查询的语句中如果只包含了那个索引列(覆盖索引),那么这种情况会查询很快。

    因为利用索引查找有优化算法,且数据就在查询索引上面,不用再去找相关的数据地址了,这样节省了很多时间。另外Mysql中也有相关的索引缓存,在并发高的时候利用缓存就效果更好了。

    在我们的例子中,我们知道id字段是主键,自然就包含了默认的主键索引。现在让我们看看利用覆盖索引的查询效果如何:

    这次我们之间查询最后一页的数据(利用覆盖索引,只包含id列),如下:
    select id from product limit 866613, 20 0.2秒
    相对于查询了所有列的37.44秒,提升了大概100多倍的速度

    那么如果我们也要查询所有列,有两种方法,一种是id>=的形式,另一种就是利用join,看下实际情况:

    SELECT * FROM product WHERE ID > =(select id from product limit 866613, 1) limit 20
    查询时间为0.2秒,简直是一个质的飞跃啊,哈哈

    另一种写法
    SELECT * FROM product a JOIN (select id from product limit 866613, 20) b ON a.ID = b.id
    查询时间也很短,赞!

    其实两者用的都是一个原理嘛,所以效果也差不多

    展开全文
  • mysql大数据量的基础下,分页中随着页码的增加,查询时间也会响应的增加。所以到了百万级别的数据量时,我们就需要优化已有的查询代码进行合理有效的分页
  • MySQL 大数据量分页性能优化

    千次阅读 2019-12-26 19:51:44
    mysql大数据量使用limit分页,随着页码的增大,查询效率越低下。 直接用limit start, count分页语句, 也是我程序中用的方法: select * from product limit start, count 当起始页较小时,查询没有性能问题,我们...
  • Mysql分页查询十分简单,但是当数据量大的时候一般的分页就吃不消了。 传统分页查询:SELECT c1,c2,cn… FROM table LIMIT n,m MySQL的limit工作原理就是先读取前面n条记录,然后抛弃前n条,读后面m条想要的,...
  • Mysql分页查询十分简单,但是当数据量大的时候一般的分页就吃不消了。 传统分页查询:SELECT c1,c2,cn… FROM table LIMIT n,m MySQL的limit工作原理就是先读取前面n条记录,然后抛弃前n条,读后面m条想要的,...
  • limit用法 SELECT * FROM t LIMIT 10,10; 第一个参数指定第一个返回记录行的偏移 第二个参数指定返回记录行的最大数目 ...所以上面SQL的含义是查询数据库第10条到第20条数据 对于小的偏移,直接使用li...
  • MySQL大数据量分页SQL语句优化

    千次阅读 2016-03-30 19:15:58
    分页程序原理很简单,这里就不多说了,本篇文章主要说的是在数据表记录比较的情况下,如何将分页SQL做到更优化,让MySQL执行的更快的方法。 一般的情况下,我们的分页SQL语句是这样的: 1 ...
  • 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_...
  • mysql 大数据量分页查询的时候可以使用子查询方式优化 select * from table_a a join (select id from table_a limit 1000000, 20) b on a.id = b.id ;   转载于:...
  • 分页程序原理很简单,这里就不多说了,本篇文章主要说的是在数据表记录比较的情况下,如何将分页SQL做到更优化,让MySQL执行的更快的方法。
  • mysql大数据量分页查询优化技巧

    万次阅读 2017-04-17 16:23:23
    PS:我们知道mysql使用Limit实现了分页查询,在我们平常的Web开发中常用一些通用的分页查询jar包,比如说有名的中国开发者实现的java Pagehelper(Github地址https://github.com/pagehelper/Mybatis-PageHelper),...
  • 比如:同样是取10条数据 select * from 表名 limit 10000,10 和 select * from 表名 limit 0,10 但是我们可以看出这两条的数据量还是相差蛮的1、 数据量比较小的时候。比如: select * from 表名 limit 10,10 ...
  • 在开发过程中,相信大家都遇到过分页,几万条数据分页可能没什么,加入有上千万或上亿条时,问题就随之而来。废话不多说,加入有会员表 members, select * from members where uid = 10000 and is_disable = 0 order ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,965
精华内容 23,986
关键字:

mysql大数据量分页优化

mysql 订阅