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…

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作者…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

vb.net调用oracle存储过程,vbnet2008连接oracle增删改查学习笔记(经典crud_含存储过程).doc...

vbnet2008连接oracle增删改查学习笔记(经典crud_含存储过程).doc 我的VBNETORACLE增删改查学习笔记(本源码在VBNET2008下测试通过)学习VBNET有一段时间了,之前一直学习VB60。过度到NET后发现与之前所学习的有了相当大的变化。于是将编程经常用到的增删改查代码提炼出…

睡眠音频分割及识别问题(六)--输入输出及方案讨论

简介 2021年7月13日,我和我的三个研究生一起拜访了玉米树,和王总等一起针对睡眠音频分割及识别问题进行了深入的讨论,达成了如下共识。 输入 由于保存整个晚上的睡眠音频所需要的存储空间过大,目前拟采用每隔30分钟&#xff08…

睡眠音频分割及识别问题(七)--接口输入输出讨论

简介 关于接口输入输出的讨论。 输入 1、音频文件路径,类型为:字符串; 2、预测多标签类型的排名,前n名,类型为:整型。 处理 1、将输入的音频分割为多个以1s为时间单位的音频片段; 2、利用P…

dhcp工具_网络分析之DHCP服务闯入QinQ二层隧道引发故障

一、Wireshark显示过滤器和QinQ二层隧道简述1.本段主要简述什么是Wireshark显示过滤器。显示过滤器是在现有的数据包中通过过滤条件,筛选想要查看的对象,不会丢失数据包,只是为了增强用户阅读而将一部分数据包隐藏起来。在“应用显…

php redis存储位置,redis数据保存在哪里

redis的数据是存在内存里吗?首先要明白redis是一个数据库,redis是一个内存数据库,所有数据基本上都存在于内存当中,会定时以追加或者快照的方式刷新到硬盘中。 (推荐学习:Redis视频教程)由于redis是一个内存数据库&…

python 多条件 选择 算法_浅析Python中的多条件排序实现

多条件排序及itemgetter的应用曾经客户端的同事用as写一大堆代码来排序,在得知Python排序往往只需要一行,惊讶无比,遂对python产生浓厚的兴趣。 之前在做足球的积分榜的时候需要用到多条件排序,如果积分相同,则按净胜球…

推荐系统: 数据、问题与算法

网络的迅速发展带来了信息量的大幅增长,使得用户在面对大量信息时无法从中获得对自己真正有用的那部分信息,对信息的使用效率反而降低了,导致信息超载(information overload)问题。 解决信息超载问题一个非常有潜力的办…

睡眠音频分割及识别问题(八)--数据采集

问题 在采用PANN或者YAMNet框架进行学习的时候,没有梦话、磨牙等睡眠音频数据,在一些公开数据集上也没有找到(如果有哪位读者知道,麻烦给我在评论区留言,万分感谢)。 公开数据集包括: &#xf…

旋转矩阵公式生成器_坐标变换(8)—复特征值与旋转

1.共轭复特征值设是的实矩阵,假设是的特征值,为对应的特征向量,则同样是的特征值,而是对应的特征向量,所以,当是的实矩阵,它的复特征值以共轭复数对出现。2. rotation-scaling matrix假如,为实数…