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

4dafc997273ddf9f72ed16a3cabd1fed.gif

文章来自: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 = 1
order by id desc 
limit 500000 ,10 

查询时间 20 秒

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

select * from news
where 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 news
where 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 news
where 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自学中心 95b3a6d19960af7571aa6d8cea8e064d.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

excel的mysql语言,Mysql中文乱码及导出sql语句和Excel的相关解决方法

这几天基于Heritrix写了一个爬虫,用到mysql,在导入导出数据时,遇到一些乱码问题,好不容易解决了,记录一下,以备查看。一、导出数据。先说明一下自己的环境:Mac OS X 10.8.3, MySQL Community Se…

conda pip安装在哪里_Python环境篇-Minicondaamp;Pip使用汇总

一、下载推荐miniconda,很方面管理python多版本环境,比Anaconda轻量。选择合适的版本:https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/或者Linux上直接执行:wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/minic…

exchange java对象,【原】Java并发程序的一个应用Exchanger的实例

【原】Java并发程序的一个使用Exchanger的实例今天看了些Exchanger的资料,有个喝水的例子不错。我这里细化了以下,并得到实现。思路:有一个Drinker和一个Waiter,有两个杯子,一个空杯子,一个杯子有3升水&…

jquery 循环_jquery实现无限循环滚动

复制下面代码查看效果原文链接:https://blog.csdn.net/qq_45378970/article/details/108903054?utm_mediumdistribute.pc_category.none-task-blog-hot-4.nonecase&depth_1-utm_sourcedistribute.pc_category.none-task-blog-hot-4.nonecase&request_id作者…

html与java接口,JavaWeb学习——Servlet相关的接口和类

JavaWeb学习——Servlet相关的接口和类摘要:本文主要学习了Servlet相关的接口和类。Servlet的接口和类三种方式实现Servlet有三种方式:实现javax.servlet.Servlet接口。继承javax.servlet.GenericServlet类。继承javax.servlet.http.HttpServlet类。实现…

delphi7 获取dll的类_跟我学Java内存管理----JMM精华终章(类加载器)

1 类加载器1.1 类的加载过程当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。(1)加载就是指将class文件读入内存,并为之创建一个Class对象。任何类被使用…

php autoload静态,Composer 中自动加载 autoload_static 问题

看来不是我一个人遇到这个问题。IDE 报语法错误,$loader 在别的类里面使用了私有成员。但是这个代码可以运行。先说一下为什么会有autoload_static.php 这个文件,代码里面其实有说明。$useStaticLoader PHP_VERSION_ID > 50600 && !defined(…

huffman树_笃学不倦|c语言构造哈夫曼树哈夫曼编码

艾薇巴蒂!许久不见甚是想念,想必这”涨姿势”的时刻大家已经期待许久了!今天我们要共同学习的是c语言构造哈夫曼树-哈夫曼编码构造哈夫曼树首先,我们需要了解哈夫曼树是什么:相关知识点路径: 路径是指从一个…

推荐系统相关科技论文写作建议

如何写标题 1、用一句话概括你所做的工作; 2、字数忌长(尽可能不要超过20单词,40-60 字符比较合适); 3、考虑搜索引擎的影响,包含关键词。 4、例子 例子1:Enhancing slope one recommendation…

php 检查类,检查类是否已定义 - PHP 7 中文文档

(PHP 4, PHP 5, PHP 7)class_exists – 检查类是否已定义说明class_exists( string $class_name[, bool $autoload true] ) : bool检查指定的类是否已定义。参数class_name类名。名字的匹配是不分区大小写的。autoload是否默认调用 [__autoload](php7/language.oop5.autoload)…

python人工智能入门纳米学位_学习笔记(一) - 机器学习纳米学位

不久前我在Udacity报名了数据分析和机器学习两门纳米课程。之所以对这个感兴趣是因为关注人工智能方面的资讯有一段时间了,觉得这是未来的趋势,希望今后能够在这方面有所成绩。选择纳米课程是因为我觉得它与Udacity的免费教程有些区别:有专业…

睡眠音频分割及识别问题(一)

问题描述 通过手机App的录音功能,获得用户一整夜的睡眠音频,对睡眠音频进行分割,并对睡眠阶段进行判定。 (1)假设条件一:用户在相对安静的环境下进行睡眠,背景音可能会出现风声、雨声、汽车噪音…

discuz和php的关系,UCenter和Discuz!的关系

在论坛上经常见到一些站长朋友问:我论坛升级后,登录不上去了,提示密码不对;头像不显示了,显示叉烧包;注册、登录不了,提示内部错误等等。这些问题都有个共同点,就是Discuz!论坛本身和…

睡眠音频分割及识别问题(四)--YAMNet简介

简介 YAMNet模型是在 AudioSet 数据集(一个大型音频、视频数据集)上训练的音频事件分类器。 模型输入 该模型接收包含任意长度波形的float32一维张量或 NumPy数组,且满足范围[-1.0, 1.0]内的单声道16kHz样本。在内部,该算法将波…

oracle运行环境配置,oracle 环境配置开机自启动

环境:centos 6.5 oracle 11g自启动之前问题虚拟机里的oracle环境,每次重启完系统,用plsql developer连接,先是报错:无TNS监听程序解决方法是切换到系统的oracle用户,执行lsnrctl start,但是执行之前,因为O…

睡眠音频分割及识别问题(二)

输入 通过手机麦克风录制的任意长度睡眠声音。 输出 睡眠阶段曲线,该曲线可以反映出深度睡眠,浅度睡眠、REM睡眠、清醒各个阶段。 研究的核心问题 1、录制策略 (1)每隔10分钟录制一段睡眠音; 2、采用什么策略来…

睡眠音频分割及识别问题(三)

文献一:PANNs: Large-Scale Pretrained Audio Neural Networks for Audio Pattern Recognition [摘要] 音频模式识别是机器学习领域的一个重要研究课题,包括音频标注、声场景分类、音乐分类、语音情感分类和声音事件检测等多项任务。最近,神…

对应oracle生成java对象,Java学习笔记(十三)——通过Netbeans开发环境生成oracle数据库中表的对应hibernate映射文件...

【前面的话】身体慢慢已经快好了,感觉真好,哈哈。这篇文章要通过Hibernate对数据库进行操作,而Netbeans可以直接通过数据库逆向生成对应的映射文件。基础文章,选择性阅读。【步骤】1、 在netbeans中选择服务,点击数据库…

qt如何实现backspace的功能_如何实现知识星球列表拖拽功能

本 篇讲解一下如何实现在知识星球中星球列表的拖拽,各位可能都知道,我创建了一个星球【Hi Android】,所以最近使用这个软件比较多,之前也写过关于这个软件如何生成分享卡的文章,就是那篇文章有小伙伴建议我写一个星球的…

睡眠音频分割及识别问题(五)--YAMNet进一步分析

简介 YAMNet 是一个经过预训练的深度网络,可基于 AudioSet-YouTube 语料库 预测 521 种音频事件类别,并采用Mobilenet_v1深度可分离卷积架构。 输入 模型训练所使用的音频特征计算方式如下: 所有音频均重采样为 16 kHz 单声道。 通过长度…