在开发过程中我们经常会使用分页,核心技术是使用limit进行数据的读取,在使用limit进行分页的测试过程中,得到以下数据:

select * from news order by id desc limit 0,10耗时0.003秒select * from news order by id desc limit 10000,10耗时0.058秒select * from news order by id desc limit 100000,10 耗时0.575秒select * from news order by id desc limit 1000000,10耗时7.28秒

我们惊讶的发现mysql在数据量大的情况下分页起点越大查询速度越慢,100万条起的查询速度已经需要7秒钟。这是一个我们无法接受的数值!

改进方案 1

select * from news where id >  (select id from news order by id desc  limit 1000000, 1)order by id desc limit 0,10

查询时间 0.365秒,提升效率是非常明显的!!原理是什么呢???

我们使用条件对id进行了筛选,在子查询 (select id from news order by id desc limit 1000000, 1) 中我们只查询了id这一个字段比起select * 或 select 多个字段 节省了大量的查询开销!

改进方案2

适合id连续的系统,速度极快!

select * from news where id  between 1000000 and 1000010 order by id desc

不适合带有条件的、id不连续的查询。速度非常快!

百万数据分页的注意事项

接上一节,我们加上查询条件:

select id from news where cate = 1order by id desc limit 500000 ,10 

查询时间 20 秒

好恐怖的速度!!利用上面方案进行优化:

select * from newswhere cate = 1 and id > (select id from news where cate = 1 order by id desc limit 500000,1 ) order by id desc limit 0,10 

查询时间 15 秒

优化效果不明显,条件带来的影响还是很大!在这样的情况下无论我们怎么去优化sql语句就无法解决运行效率问题。

那么换个思路:建立一个索引表,只记录文章的id、分类信息,我们将文章内容这个大字段分割出去。

表 news2 [ 文章表 引擎 myisam 字符集 utf-8 ]

-------------------------------------------------

id int 11 主键自动增加

cate int 11 索引

在写入数据时将2张表同步,查询是则可以使用news2 来进行条件查询:

select * from newswhere cate = 1 and id > (select id from news2 where cate = 1 order by id desc limit 500000,1 ) order by id desc limit 0,10

注意条件 id > 后面使用了news2 这张表!

运行时间 1.23秒,我们可以看到运行时间缩减了近20倍!!数据在10万左右是查询时间可以保持在0.5秒左右,是一个逐步接近我们能够容忍的值!

但是1秒对于服务器来说依然是一个不能接受的值!!还有什么可以优化的办法吗??

我们尝试了一个伟大的变化:

将 news2 的存储引擎改变为innodb,执行结果是惊人的!

select * from newswhere cate = 1 and id > (select id from news2 where cate = 1 order by id desc limit 500000,1 ) order by id desc limit 0,10

只需要 0.2秒,非常棒的速度。

到了这一步,我们的分页优化完毕,显然是有很大的效果的。你自己可以测试一下!

领取方式:点赞关注小编后私信【资料】获取资料领取方式!

部分资料展示:

领取方式:点赞关注小编后私信【资料】获取资料领取方式!

mysql查询当月数据_MySQL百万数据,你如何用分页来查询数据相关推荐

  1. mysql获取当月最后一天_mysql中获取本月第一天、本月最后一天、上月第一天、上月最后一天

    mysql获取当月最后一天_mysql中获取本月第一天.本月最后一天.上月第一天.上月最后一天等等 转自: https://blog.csdn.net/min996358312/article/det ...

  2. mysql分组随机取数据_MySql分组后随机获取每组一条数据的操作

    思路:先随机排序然后再分组就好了. 1.创建表: create table `xdx_test` ( `id` int(11) not null, `name` varchar(255) defaul ...

  3. MySQL简单表的数据_MySQL(二)表的操作与简单数据操作

    六大约束:主键约束.外键约束.非空约束.唯一约束.默认约束.自动增加 1.not null非空 2.defaul默认值,用于保证该字段的默认值 ; 比如年龄:1900-10-10 3.primar k ...

  4. MySQL单机并发量_mysql百万并发量-MySQL集群能支持100万个并发请求吗

    当然支持100万并发. 首先,我们必须做出决定,把阅读和写作分开. 然后,它取决于你需要分配多少个单元用于写作和阅读. 我的SQL集群不建议您使用它,因为有太多的错误. 所有这些都需要先进行压力测试. ...

  5. mysql tcp性能优化_MySQL性能优化: 使用pt-query-digest分析慢查询日志

    一.简介 pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog.General log.slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdu ...

  6. MYSQL数据库字段关联_MySQL数据库基础——操作关系表、连接查询

    MySQL数据库基础入门--day11 一.操作关联表 1.关联关系: 关联关系有:多对一.多对多和一对多. 一对一关联关系可以应用在以下几方面: (1)分割具有很多列的表 (2)由于安全原因而隔离表 ...

  7. mysql获取当月数据_MySQL中获取天、周、月等数据

    MySQL中获取天.周.月等数据 1.今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 2.昨天 SELECT * FROM 表名 ...

  8. bootstrap table无法服务器分页_[精选] MySQL百万数据,你如何用分页来查询数据

    文章来自:https://www.cnblogs.com/lxwphp/p/9237331.html 商务合作: 请加微信 2230304070 精选文章正文 在开发过程中我们经常会使用分页,核心技术 ...

  9. mysql limit 大数据_MySQL limit使用方法以及超大分页问题解决

    前言 日常开发中,我们使用mysql来实现分页功能的时候,总是会用到mysql的limit语法.而怎么使用却很有讲究的,今天来总结一下. limit语法 limit语法支持两个参数,offset和li ...

最新文章

  1. 改变跳转页面 英文_如何高效阅读英文文献?你可以试试它 | 知云文献翻译
  2. LTE中QPSK、16QAM、64QAM
  3. 基于空间数据库的空间数据管理
  4. MySQL数据库InnoDB坏页处理修复
  5. EL表达式 jsp2.0 jsp1.2 与 tomcat
  6. java 根据类名示例化类_Java MathContext类| 带示例的getRoundingMode()方法
  7. HTML 元素和属性--备份
  8. oracle数据库看开销,【Database】AIX系统下跟踪开销大的Oracle数据库进程
  9. 产品经理之深度学习促进产品(二)
  10. 基于JAVA+SpringBoot+Mybatis+MYSQL的个人理财系统
  11. 剑指offerJZ1 二维数组中的查找 C++ python
  12. python开源商城_Python 开源网上商城项目
  13. 思岚激光雷达rplidar从ROS 1到ROS 2的移植
  14. Python Keras ValueError: Layer sequential expects 1 input(s), but it received 2 input tensors. 解决方法
  15. 盘古开源:技术为基创新驱动数据存储体系完善
  16. Android解析XML的三种方式
  17. 快来帮你三分钟了解物联网
  18. Android Sensor Orientation 传感器开发
  19. 贯穿了易学思想的《大学》与《中庸》
  20. StringRedisTemplate报NullPointerException

热门文章

  1. mysql基于ssl安全连接的主从复制
  2. React-Native测试报告
  3. 一篇由Google Trend引发的Post
  4. CF刷刷水题找自信 2
  5. Tomcat URL重写
  6. String str = new String(abc)创建了几个对象?结合源码解析
  7. java实现.net中的枚举
  8. CSS伪对象选择符整理
  9. awk处理之案例五:awk匹配字段2包含字段1的文本
  10. c++ 求2-100内的素数问题