文章来自:https://www.cnblogs.com/lxwphp/p/9237331.html

商务合作: 请加微信 2230304070

精选文章正文

在开发过程中我们经常会使用分页,核心技术是使用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秒,非常棒的速度。

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

以上是本文的全部内容,希望对大家的学习有帮助,也希望大家多多支持php自学中心 

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

  1. mysql数据库服务器重启_重启mysql数据库服务器

    Mysql错误代码大全 1016错误:文件无法打开,使用后台修复或者使用phpmyadmin进行修复. 1044错误:数据库用户权限不足,请联系空间商解决 1045错误:数据库服务器/数据库用户名/数 ...

  2. mysql fulltext 分页_关于MySQL的FULLTEXT实现全文检索的注意事项

    对于英文,MySQL的FULLTEXT属性来实现全文检索是相当方便且高效的,但是在使用过程中需要注意一些事项. 首先对我们对需要进行检索的字段添加FULLTEXT属性(假设已经建表): SQL: al ...

  3. long mode 分页_在Spring Boot中使用Spring-data-jpa实现分页查询(转)

    在我们平时的工作中,查询列表在我们的系统中基本随处可见,那么我们如何使用jpa进行多条件查询以及查询列表分页呢?下面我将介绍两种多条件查询方式. 1.引入起步依赖 org.springframewor ...

  4. mysql插入表情_向MySQL数据库中插入带emoji表情符的数据时报错

    问题:向MySQL数据库中插入带emoji表情符的数据时报错 原因:utf8字符集不支持emoji表情符,需要改为utf8mb4字符集(utf8mb4是MySQL在5.5.3之后增加的,实际开发中建议 ...

  5. java web几百万分页_举例详解用Java实现web分页功能的方法

    举例详解用Java实现web分页功能的方法 发布于 2020-11-25| 复制链接 摘记: 分页问题是一个非常普遍的问题,开发者几乎都会遇到,这里不讨论具体如何分页,说明一下Web方式下分页的原理. ...

  6. mysql 分组联合查询_【MySQL】-2 函数、分组、子查询、联合查询

    函数 Mysql的函数特性没有SQL可移植性强. 大多数情况下支持的函数: 处理文本串的函数: RTrim():处理列值右边的空格 LTrim():处理列值左边的空格 Trim():处理列值的左右两边 ...

  7. mysql查询字段纯字母_解决MySQL之中一个字段中无法精准的查询多语言语言字母的问题...

    解决MySQL之中一个字段中无法精准的查询多语言语言字母的问题 解决MySQL之中一个字段中无法精准的查询多语言语言字母的问题 目录 1.使用场景 2.实现过程及展示结果 2.1.修改字段排序规则为u ...

  8. python数据存储和查询代码_【Python分享】如何便捷地存储、查询数据

    前言在之前的文章(如下)中,分享了爬取天天基金.中债指数的代码.爬取的数据很多,如何方便地存储.查询,也是一个麻烦的问题.本文分享一下我实现的基于 lsm-db 的本地文件数据存储.查询模块. 分享天 ...

  9. mysql实例化_MySQL如何通过实例化对象参数查询数据 ?(源代码)

    本篇文章给大家带来的内容是关于MySQL如何通过实例化对象参数查询数据 ?(源代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助.public static string Query ...

最新文章

  1. 计算机科学与技术讲座psd,计算机科学的技术基本.ppt
  2. WordPress 多媒体库添加分类和标签支持
  3. bootstrap 栅栏布局中 col-xs-*、col-sm-*、col-md-*、col-lg-* 区别及使用方法
  4. php date( w ),PHP Date()函数详解
  5. 数据库系统工程师5天修炼_程序员逆袭之路,5年IT人生从电脑装机到技术大神,人生不认输...
  6. SAP License:SAP中的报表查询
  7. Go VSCode配置编译task
  8. 读书节第二日丨数据大咖来荐读,互动荐书赢好礼!
  9. 个人 易混淆 高频 高级单词
  10. 天津互联网公司和生活成本
  11. 12星座的出生年月日性格_十二星座的出生日期及对应性格
  12. Jenkins平台搭建
  13. 后端面试(一)计算机网络相关
  14. windows mysql 开启非3306端口
  15. Unity Unlit ShaderGraph实现与PBR的自发光贴图类似的叠加效果
  16. MySQL 基础 -- MySQL 数据类型说明(数值类型、字符串类型、日期时间类型)、SQL通用语法和SQL分类
  17. 在JS中利用for...in循环遍历对象
  18. 海关179号公文接入
  19. python读音有道-Python 20行简单实现有道在线翻译的详解
  20. python蓝牙编程代码_以编程方式通过python将蓝牙设备绑定到rfcomm

热门文章

  1. Scrapy源码阅读分析_3_核心组件
  2. 掌控谈话~拔刺(说出你对我的指控)
  3. Introduce Parameter Object(引入参数对象)
  4. java logout session_会话跟踪技术--session的使用
  5. oracle自增的两种办法,ORACLE数据库实现自增的两种方式
  6. oracle sequence 不同 会话 不连续_序列 Sequence
  7. 服务动态选择域名问题
  8. CoreText使用介绍
  9. oracle 时间间隔,ORACLE JOB间隔时间参考
  10. opencv java ubuntu_Ubuntu 16.04配置OpenCV 3.1.0 for Java