1、直接使用数据库提供的SQL语句 limit M ,N

SELECT * from message limit 0 , 10 ; -- 0.044

SELECT * from message limit 100 , 10 ; -- 0.084

SELECT * from message limit 1000 , 10 ; -- 0.087

SELECT * from message limit 10000 , 10 ; -- 0.102

SELECT * from message limit 100000 , 10 ; -- 0.236

SELECT * from message limit 1000000 , 10 ; -- 1.584

SELECT * from message limit 2000000 , 10 ; -- 2.961

  

适用场景:可以看出,在数据量小时,使用limit M ,N 可以很快的查询出数据,但是当数据量达到十万级甚至百万级时,查询效率呈几何倍数递增;

分析: 如下,其原因是,该查询会导致全表扫描,速度会很慢,且有的数据库返回结果集不稳定(如某次返回1,2,3,另外一次返回2,1,3),limit限制的是从结果集的M位置取出N条输出,其余抛弃;

2、基于索引排序

SELECT * from message order by id asc limit 0 , 10 ; -- 0.085

SELECT * from message order by id asc limit 100 , 10 ; -- 0.084

SELECT * from message order by id asc limit 1000 , 10 ; -- 0.088

SELECT * from message order by id asc limit 10000 , 10 ; -- 0.099

SELECT * from message order by id asc limit 100000 , 10 ; -- 0.227

SELECT * from message order by id asc limit 1000000 , 10 ; -- 1.532

  

适用场景:数据量小时,当数据量达到十万到百万级时,查询效率与第一种相比,仍呈现几何倍数递增

分析:在数据量小时,会根据索引进行选择,但是数据量大时,仍旧会导致全表扫描

3、基于所以筛选再排序

SELECT * from message order by id asc limit 10 ; -- 0.043

SELECT * from message where id > 100 order by id asc limit 10 ; -- 0.085

SELECT * from message where id > 1000 order by id asc limit 10 ; -- 0.085

SELECT * from message where id > 10000 order by id asc limit 10 ; -- 0.084

SELECT * from message where id > 100000 order by id asc limit 10 ; -- 0.085

SELECT * from message where id > 1000000 order by id asc limit 10 ; -- 0.083

SELECT * from message where id > 2000000 order by id asc limit 10 ; -- 0.085

SELECT * from message where id > 2000000 order by id desc limit 10 ; -- 0.085

  

总结:可以看出,该查询效率稳定,适用于数据量多是情况,最后ORDER BY后的列对象是主键或者唯一索引,使得ORDER BY操作能利用索引被消除,但是结果集是稳定的

分析:索引扫描,速度会很快;

mysql limit分页查询效率比拼的更多相关文章

  1. mysql limit分页查询效率

    对于有大数据量的mysql表来说,使用LIMIT分页存在很严重的性能问题. 查询从第1000000之后的30条记录: SQL代码1:平均用时6.6秒 SELECT * FROM `cdb_posts` ...

  2. 在MySQL中如何使用覆盖索引优化limit分页查询

    背景 今年3月份时候,线上发生一次大事故.公司主要后端服务器发生宕机,所有接口超时.宕机半小时后,又自动恢复正常.但是过了2小时,又再次发生宕机. 通过接口日志,发现MySQL数据库无法响应服务器.在 ...

  3. Mysql中分页查询两个方法比较

    mysql中分页查询有两种方式, 一种是使用COUNT(*)的方式,具体代码如下 1 2 3 SELECT COUNT(*) FROM foo WHERE b = 1;   SELECT a FROM ...

  4. oracle 的分页查询与mysql 的分页查询

    oracle 的分页查询: select * from (select o.*,rownum rn  from Persons o) where rn >40 and rn <=60 : ...

  5. MySQL Limit 限定查询记录数

    MySQL Limit 限定查询记录数 MySQL LIMIT MySQL 中 LIMIT 关键字用于限定查询记录返回最大数目. 语法: ... LIMIT offset , rows 该语法中,of ...

  6. Oracle和MySql的分页查询区别和PL/SQL的基本概念

    Oracle和MySql的分页查询区别:     Oracle的分析查询,之前Oracle的分页是使用伪列 ROWNUM 结合子查询实现,mysql的分页更简单,直接使用 LIMIT 关键字就可以实现 ...

  7. mysql in 子查询 效率慢 优化(转)

    mysql in 子查询 效率慢 优化(转) 现在的CMS系统.博客系统.BBS等都喜欢使用标签tag作交叉链接,因此我也尝鲜用了下.但用了后发现我想查询某个tag的文章列表时速度很慢,达到5秒之久! ...

  8. Mybatis的ResultMap与limit分页查询

    ResultMap主要解决的是:属性名和字段不一致 如果在pojo中设置的是一个名字,在数据库上又是另一个名字,那么查询出来的结果或者其他操作的结果就为null. //在pojo中 private S ...

  9. mysql limit分页查询优化写法

    在mysql中进行分页查询时,一般会使用limit查询,而且通常查询中都会使用orderby排 序.但是在表数据量比较大的时候,例如查询语句片段limit 10000, 20,数据库会读取10020条 ...

随机推荐

  1. STM32学习的一些实例

    第一讲:修炼STM32之乾坤大挪移术—— 如何用DMA神器搬运数据DMA,即直接存储器访问.DMA 传输方式无需 CPU 直接控制传输,通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路, ...

  2. C++ 洛谷P1230 智力大冲浪

    题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则: ...

  3. 深入理解Java虚拟机笔记——虚拟机类加载机制

    目录 概述 动态加载和动态连接 类加载的时机 类的生命周期 被动引用 例子一(调用子类继承父类的字段) 例子二(数组) 例子三(静态常量) 类加载的过程 加载 验证 准备 解析 符号引用 直接引用 初 ...

  4. Codeforces Gym101518F:Dimensional Warp Drive(二分+高斯消元)

    题目链接 题意 给出一个11元组A和11元组B,给出n个11元方程,每个方程有一个日期,要让A变成B,问最少需要日期多少才可以变. 思路 因为日期满足单调性,所以可以二分答案.判断的时候就是高斯消元套 ...

  5. Codeforces 781A:Andryusha and Colored Balloons(DFS染色)

    http://codeforces.com/contest/782/problem/C 题意:给一棵树染最少的颜色,使得相邻距离为2的点都是不同的颜色,问最少是多少种颜色并输出每个点的颜色. 思路:比 ...

  6. RedisDesktopManager远程连接Linux系统的Redis服务

    linux下安装redis :https://www.runoob.com/redis/redis-install.html 进入 src 运行redis   : ./redis-server 打开另 ...

  7. MyBatis 核心配置综述之Executor

    目录 MyBatis四大组件之 Executor执行器 Executor的继承结构 Executor创建过程以及源码分析 Executor接口的主要方法 Executor 的现实抽象 上一篇我们对Sq ...

  8. Java实现LRU算法

    一.LRU算法简介 LRU(Least Recently Used)最近最久未使用算法 常见应用场景:内存管理中的页面置换算法.缓存淘汰中的淘汰策略等 二.实现理论 底层结构:双向链表 + HashM ...

  9. vue组件间通信六种方式(完整版)

    本文总结了vue组件间通信的几种方式,如props. $emit/ $on.vuex. $parent / $children. $attrs/ $listeners和provide/inject,以 ...

  10. 基于Actor模型的CQRS、ES解决方案分享

    开场白 大家晚上好,我是郑承良,跟大家分享的话题是<基于Actor模型的CQRS/ES解决方案分享>,最近一段时间我一直是这个话题的学习者.追随者,这个话题目前生产环境落地的资料少一些,分 ...