假设有一个千万量级的表,取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;

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

Mysql大数据量分页优化的更多相关文章

  1. MySQL 大数据量分页优化

    假设有一个千万量级的表,取1到10条数据: ,; ,; 这两条语句查询时间应该在毫秒级完成: ,; 你可能没想到,这条语句执行之间在5s左右: 为什么相差这么大? 可能mysql并没有你想的那么智能, ...

  2. MySQL大数据量分页查询方法及其优化

    MySQL大数据量分页查询方法及其优化   ---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适 ...

  3. 【1】MySQL大数据量分页查询方法及其优化

    ---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适应场景: 适用于数据量较少的情况(元组百/千 ...

  4. MySQL大数据量分页性能优化

    mysql大数据量使用limit分页,随着页码的增大,查询效率越低下. 测试实验 1.   直接用limit start, count分页语句, 也是我程序中用的方法: select * from p ...

  5. MySQL大数据量分页查询

    mysql大数据量使用limit分页,随着页码的增大,查询效率越低下. 测试实验 1.   直接用limit start, count分页语句, 也是我程序中用的方法: select * from p ...

  6. SQL优化-大数据量分页优化

    百万数据量SQL,在进行分页查询时会出现性能问题,例如我们使用PageHelper时,由于分页查询时,PageHelper会拦截查询的语句会进行两个步骤 1.添加 select count(*)fro ...

  7. 【mysql优化】大数据量分页优化

    limit 翻页原理 limit offset,N, 当offset非常大时, 效率极低, 原因是mysql并不是跳过offset行,然后单取N行, 而是取offset+N行,返回放弃前offset行 ...

  8. 【MYSQL】mysql大数据量分页性能优化

    转载地址: http://www.cnblogs.com/lpfuture/p/5772055.html https://www.cnblogs.com/shiwenhu/p/5757250.html ...

  9. mysql大数据量分页查询优化

    参考文章:https://www.dexcoder.com/selfly/article/293 Mysql的分页查询十分简单,但是当数据量大的时候一般的分页就吃不消了. 传统分页查询:SELECT ...

随机推荐

  1. bash的使用技巧

  2. 用分立元件实现串口通讯TTL/RS232电平转换

    1.计算机串口通信的RS-232电平:用正负电压来表示逻辑状态.逻辑1= = -3V--15V,逻辑0=+3-+15V. 2.单片机串口通信的TTL电平:输出高电平>2.4V,输出低电平< ...

  3. typeof关键字

    C语言中 typeof 关键字是用来定义变量数据类型的.在linux内核源代码中广泛使用. 使用方法 1.当x的类型为是 int 时 _min1变量的数据类型则为 int. 2.当x为一个表达式时(例 ...

  4. CentOS 6.5 安装 php7 教程 包很重要使用lnmp1.4里面的包

    ./configure \ --prefix=/usr/local/php-7.0.1 \ --with-mysql=mysqlnd \ --with-pdo-mysql=mysqlnd \ --wi ...

  5. 面向对象设计原则三:里氏替换原则(LSP)

    里氏替换原则(LSP)定义:在任何父类出现的地方都可以用它的子类类替换,且不影响功能.解释说明:其实LSP是对开闭原则的一个扩展,在OO思想中,我们知道对象是由一系列的状态和行为组成的,里氏替换原则说 ...

  6. [oracle] update语句卡住问题

    执行update语句的时候发现执行半天不成功 update main_order set order_source = '2', order_status = '2' 查询哪些对象被锁 select ...

  7. 十步理解Sql

    很多程序员视 SQL 为洪水猛兽.SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程序语言.甚至是函数语言(尽管有些人认为 SQL 语言也是一种函数式语言) ...

  8. Wamp2.5 64bit,无法改动MySQL datadir位置

    今天偶然想到去更新一下机子里面PHP的版本号,然后又一次去wamp官网下载了WAMP(wamp 64  Apache : 2.4.9 MySQL : 5.6.17 PHP : 5.5.12 PHPMy ...

  9. cocos2d怎么设置屏幕朝向?横屏 or 竖屏设置

    在cocos引擎里面找了好久.没找到相关接口,网上也搜索了好久,最后发现.原来须要依据各个平台分别进行设置. android 改动项目根文件夹 proj.android\AndroidManifest ...

  10. 列表框清屏/CListBox清空

    CListBox自带方法: MyListBox->ResetContent(); CListBox用法: 关联一个变量m_List,m_List.AddString("test&quo ...