也谈mysql的limit优化

MySQL5.6中limit的工作机制和order by limit优化原理 MySQL5.6中Limit的工作机制 如果你仅需要在一个结果集中返回特定的几行,通常是使用limit,而不是取回整个结果集再舍去不需要的数据,MySQL通常按照如下的方式优化一个包含limit row_count或HAVING的语句: ◎只有limit 如果你只通过limit返回少量的行,那么正常情况下mysql会使用全盘扫描,有些场合会使用索引,以下是使用了覆盖索引的情况: 阅读详情

测试环境

操作系统: debian linux

服务器版本: Mysql 5.0.24

Mysql数据库的Qcache缓存关闭

数据库表testtable的参数:

类型:     MyISAM 大小:     >80MB 记录规模: >50000 字段数:   >25个字段

id是主键 leibie字段上建有索引

进行数据分段测试

1>SQL不带where条件的测试

1)50290行开始 显示行 0 - 9 (10 总计, 查询花费 0.2647 秒) SQL 查询: SELECT * FROM `testtable` LIMIT 50290 , 10

显示行 0 - 9 (10 总计, 查询花费 0.0377 秒) SQL 查询: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 50290 , 1 ) LIMIT 1 , 10

2)30290行开始

显示行 0 - 9 (10 总计, 查询花费 0.1527 秒) SQL 查询: SELECT * FROM `testtable` LIMIT 30290 , 10

显示行 0 - 9 (10 总计, 查询花费 0.0208 秒) SQL 查询: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 30290 , 1 ) LIMIT 1 , 10

3)20290行开始

显示行 0 - 9 (10 总计, 查询花费 0.1070 秒) SQL 查询: SELECT * FROM `testtable` LIMIT 20290 , 10

显示行 0 - 9 (10 总计, 查询花费 0.0191 秒) SQL 查询: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 20290 , 1 ) LIMIT 1 , 10

4)10290行开始

显示行 0 - 9 (10 总计, 查询花费 0.0707 秒) SQL 查询: SELECT * FROM `testtable` LIMIT 10290 , 10

显示行 0 - 9 (10 总计, 查询花费 0.0087 秒) SQL 查询: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 10290 , 1 ) LIMIT 1 , 10

5)5290行开始

显示行 0 - 9 (10 总计, 查询花费 0.0245 秒) SQL 查询: SELECT * FROM `testtable` LIMIT 5290 , 10

显示行 0 - 9 (10 总计, 查询花费 0.0065 秒) SQL 查询: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 5290 , 1 ) LIMIT 1 , 10

6)2590行开始

显示行 0 - 9 (10 总计, 查询花费 0.0140 秒) SQL 查询: SELECT * FROM `testtable` LIMIT 2590 , 10

显示行 0 - 9 (10 总计, 查询花费 0.0050 秒) SQL 查询: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 2590 , 1 ) LIMIT 1 , 10

7)1000行开始

显示行 0 - 9 (10 总计, 查询花费 0.0113 秒) SQL 查询: SELECT * FROM `testtable` LIMIT 1000 , 10

显示行 0 - 9 (10 总计, 查询花费 0.0043 秒) SQL 查询: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 1000 , 1 ) LIMIT 1 , 10

8)500行开始 显示行 0 - 9 (10 总计, 查询花费 0.0062 秒) SQL 查询: SELECT * FROM `testtable` LIMIT 500 , 10

显示行 0 - 9 (10 总计, 查询花费 0.0037 秒) SQL 查询: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 500 , 1 ) LIMIT 1 , 10

9)300行开始

显示行 0 - 9 (10 总计, 查询花费 0.0067 秒) SQL 查询: SELECT * FROM `testtable` LIMIT 300 , 10

显示行 0 - 9 (10 总计, 查询花费 0.0055 秒) SQL 查询: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 300 , 1 ) LIMIT 1 , 10

10)100行开始

显示行 0 - 9 (10 总计, 查询花费 0.0055 秒) SQL 查询: SELECT * FROM `testtable` LIMIT 100 , 10

显示行 0 - 9 (10 总计, 查询花费 0.0112 秒) SQL 查询: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 100 , 1 ) LIMIT 1 , 10

2>SQL带where条件的测试(满足条件的数据记录>5000)

1)990行开始

显示行 0 - 1 (2 总计, 查询花费 0.0086 秒) SQL 查询: SELECT * FROM `testtable` WHERE leibie = 1 LIMIT 990 , 10

显示行 0 - 9 (10 总计, 查询花费 0.0123 秒) SQL 查询: SELECT * FROM `testtable` WHERE id >= ( SELECT id FROM `testtable` WHERE leibie = 1 LIMIT 990 , 1 ) LIMIT 1 , 10

2)2990行开始 显示行 0 - 9 (10 总计, 查询花费 0.0502 秒) SQL 查询: SELECT * FROM `testtable` WHERE leibie = 1 LIMIT 2990 , 10

显示行 0 - 9 (10 总计, 查询花费 0.0357 秒) SQL 查询: SELECT * FROM `testtable` WHERE id >= ( SELECT id FROM `testtable` WHERE leibie = 1 LIMIT 2990 , 1 ) LIMIT 1 , 10

3)5690行开始

显示行 0 - 9 (10 总计, 查询花费 0.0547 秒) SQL 查询: SELECT * FROM `testtable` WHERE leibie = 1 LIMIT 5690 , 10

显示行 0 - 9 (10 总计, 查询花费 0.2101 秒) SQL 查询: SELECT * FROM `testtable` WHERE id >= ( SELECT id FROM `testtable` WHERE leibie = 1 LIMIT 5690 , 1 ) LIMIT 1 , 10

测试结论:

不带where条件时,limit后的数字小于100时,正常的SQL语句效率比较高;limit后的数字大于100时,优化后的效率是没有优化的1.2 - 7 倍. limit后的数字越大,优化后的效果越明显.

带where条件时,优化的结果就不明显了,甚至是优化的结果效率更差了

mysql如何优化limit分页 进行分页查询时,随着数据量的增长和偏移量(OFFSET)的增大,查询性能可能会显著下降,特别是在处理大偏移量时,数据库需要扫描并丢弃大量不需要的行,造成不必要的资源消耗。:如果查询只涉及到索引中已包含的列(即“覆盖索引”),数据库可以直接从索引中获取所需数据,而无需访问实际的数据行,大大减少了I/O操作。:对于复杂查询或数据量巨大时,可以预先计算并存储部分结果,如每日、每周的统计数据,或特定查询结果。:对于非常大的偏移量,可以从尾部开始向前扫描索引,利用索引的有序性获取所需数据。 阅读详情

相关推荐

ESP32+LED12864液晶屏实战:手把手教你显示中文与自定义图标(附完整代码)

本文详细介绍了如何使用ESP32单片机驱动带字库的LED12864液晶屏,实现中文显示与自定义图标。从硬件选型、接线方案到驱动编写、字库解析,提供了完整的实战代码与优化技巧,并最终构建了一个智能家居控制面板的完整示例项目。

weixin_29212867的博客 145

mysql使用总结

mysql单表查询 1. 查找某个字段有哪些类型,可以用group by, 分组查询可以列出所有的类型 SELECT * FROM t_dispatch_log GROUP BY failure_reason; 2. 查找最新时间段的数据 sELECT * FROM t_dispatch_log where create_time > '2018-10-11 14:00:00' OR............

zhaotaozi77的博客 982

海康威视摄像机SDK二次开发--提取音频保存至文件

由于最近在开发海康威视摄像头,特此记录一下如何提取音频数据,这里主要依靠语音对讲返回的音频数据,通过回调函数写入文件中,加个WAV头即可播放,编码格式可以自己设置在代码中有注释 文件结构 其中CameraInfo内容可以参看海康威视摄像机SDK二次开发–实时预览视频流保存到指定文件中 HIKSDKSaveRealData中的内容 package ClientDemo; import ClientDemo.CameraInfo; import com.sun.jna.NativeLong; import

RichardoMu的博客 3172

MySQL的LIMIT与分页优化

这样考虑的于是就有了下面四个优化的建议来提高性能 1、首次查询的时候缓存结果。这样情况就变得简单了,无论是结果条目的数量,总共的页面数量,还是取出其中的部分条目。 2、不显示总共有多少条目。Google搜索结果的分页显示就用了这个特性。很多时候你可能看了前几页,就够了。那么我可以这样,每次我都把结果限制在500条(这个数据越大 资源消耗越大)然后你每次查询的时候,都查询501条记录,这样,如果结果真有501个,那么我们就显示链接 “显示下500条记录”。 3、不显示总页面数。只给出“下一页”的链接,如果有

很多时候,你缺少的不是知识而是热情 3939

基于 Quest 摄像头数据开发的原理介绍【Unity Meta Quest MR 开发教程】

比如想在识别到的现实物体上叠加虚拟物体,需要知道这个现实物体在 Unity 的世界坐标下的哪个位置,是带有 x,y,z 三个轴的数据的。而 WebCamTexture 捕捉到的图像只是个 2D 的平面,没有三维世界的深度信息,我们通过物体识别算法识别到的物体坐标只是在这个 2D 平面上的一个屏幕坐标,可以理解为 Quest 拍摄了一张照片,我们识别到这张照片上的某个像素点为需要识别的现实物体的中心。是不是看起来比较复杂?Quest 的相机访问功能是在安卓的。

qq_46044366的博客 2104

STM32中RS485方向控制引脚应用详解

深入解析STM32如何通过GPIO控制RS485通讯的方向引脚,实现半双工通信的精准切换。重点讲解硬件连接与软件时序配合,确保rs485通讯稳定可靠,适用于工业控制等实际场景。

weixin_42451850的博客 398

mysql分页查询陷阱

背景 最近项目遇到了一个简单sql查询查不出自己想要的记录,就是每页5000条分页查询订单号,注意查询条件中没有任何排序哦, 表中order_id(idx_order_id)建了普通索引,sql语句如下: -- 分页查询订单号 select order_no from dn_agent_order_money_bill where order_id > 0 limit 0,10; 表...

大龙的博客 644

模拟波束赋形 vs 数字波束赋形:5G天线设计中的成本与性能权衡

本文深入剖析了5G天线设计中模拟波束赋形与数字波束赋形的核心差异,重点探讨了二者在硬件成本、功耗、网络覆盖能力和频谱效率等方面的权衡。文章指出,模拟方案成本低但灵活性有限,数字方案性能强大但代价高昂,而混合波束赋形已成为主流折中方案。决策需紧密结合具体的部署场景、性能要求和总拥有成本进行综合考量。

weixin_28432777的博客 840

SQL中limit的用法(一个参数,两个参数),分页查询

一个参数时,参数值为多少就查询表中前多少条数据 两个参数时,因为limit默认下标从0开始,第一个参数是下标,查数据的话是从第一条查,第二个参数限定了几条数据

weixin_52293201的博客 6781

大数据预测分析:精准把握市场趋势

传统市场预测多依赖经验判断(比如“去年卖了1000件,今年加20%”)或小数据统计(比如用近6个月的销量做线性回归)。而大数据预测分析是:利用海量结构化+非结构化数据(销售、用户、社交媒体、天气等),通过机器学习/深度学习模型,挖掘数据中的关联关系与趋势规律,实现对未来市场走势的精准预测。更全面:覆盖内部(企业数据)+外部(行业、环境数据)的全维度数据;更精准:用算法替代人工,避免主观偏差;更实时:支持分钟级/小时级的实时预测(比如直播带货的销量预测)。错误做法。

AI智能探索者的博客 1024

银行监管报送系统介绍(十五):金融审计平台

金审平台主要包括基础、财务、结算、信贷和中间业务五大板块,主要服务于审计署对中国银行的各项审计任务,同时也可为行内审计、稽核检查、数据分析、总分行提供基础数据服务,为实现基础数据共享提供了有力的数据保障。2019年1月某全国性股份制商业银行收到审计署2019-23号文,文中指出为进一步提高审计数据质量,审计署审计组派员前往9家重点商业银行,就完善标准化数据的相关情况与各银行有关部门进行讨论协商。关于数据报送频率及报送内容:数据从2019年4月开始,按月报送,即于每月25日之前报送上月数据;

银行信息系统应用架构详解 2052

4、 LIMIT:限制查询结果的条数

当数据表中有上万条数据时,一次性查询出表中的全部数据会降低数据返回的速度,同时给数据库服务器造成很大的压力。这时就可以用 LIMIT 关键字来限制查询结果返回的条数。 LIMIT 是 MySQL 中的一个特殊关键字,用于指定查询结果从哪条记录开始显示,一共显示多少条记录。 LIMIT 关键字有 3 种使用方式,即指定初始位置、不指定初始位置以及与 OFFSET 组合使用。 指定初始位置 LIMIT 关键字可以指定查询结果从哪条记录开始显示,显示多少条记录。 LIMIT 指定初始位置的基本语法格式如下: LI

you can you up up up的博客 5976

基于深度学习的堰塞坝表层颗粒物质识别研究

本文提出一种基于深度学习的堰塞坝表层颗粒物质智能识别方法,针对颗粒分布散乱、背景复杂的问题,采用"大颗粒逐个识别、密集小颗粒分块识别"策略。结合Mask R-CNN、SLIC和AlexNet构建识别模型,通过无人机影像实现自动识别。实验表明该方法精度超过90%,具备迁移能力。文章提供了Python实现代码,涵盖数据预处理、SLIC分割、模型构建(Mask R-CNN和AlexNet)及训练流程,为堰塞坝应急抢险提供技术支持。

huanghm88的专栏 181

【MySQL性能优化系列】百万数据limit分页优化

众所周知,在使用limit分页过程中,随着前端传过来的PageSize越来越大,查询速度会越来越慢。那有什么优化的办法呢?本文将通过百万数据表进行演示和优化, 欲知详情,请看下文分解。

7me 4310

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

MySQL中Limit性能优化的方案

在MySQL中Limit有两种语法: limit offset, rows limit rows 其中offset表示偏移量,rows表示要返回的记录条数。比如我们要查出第1000到第1010行的记录,就会写成 limit 999, 10 。一般我们在实际开发中做分页查询的时候,rows不会太大,因为rows表示每页要显示的数量(你总不可能每页要显示个几万条吧)。而随着页数的加深,offset就会变大,查询效率随之就变慢了。 为什么当offset很大时,查询效率会变慢呢? 比如当我们用 limit 10

czx2018的博客 9084

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

MySQL的limit优化

MySQL的limit优化

京北游戏官方 2万+

mysql的limit原理和一些优化总结

文章目录前言1.只有limit:2.limit和order by:3.limit和distinct配合使用:4.limit和group by配合使用:5.limit 0:6.sort_buffer_size的利用:结尾 前言 参考:https://blog.youkuaiyun.com/u013870094/article/details/78880498 mysql是我们经常使用的关系型数据库,我们常用的业务中也会涉及到分页的场景,limit使我们经常使用的函数,了解其原理也有助于我们工作当中的sql优化。 1.只有

u010720120的博客 3450

MySQL的limit和offset优化

这两天在看关于MySQL分页查询的优化问题,看到网上的不少文章。MySQL的分页查询通常都离不开limit帮忙,而其中的关键主要围绕以下两点:1. 尽量减小limit的offset,即较小“limit m, n”里面的“m”。参考文章:http://www.fuchaoqun.com/2009/04/efficient-pagination-using-mysql/2. 仅先定位offset的id,再查需要的limit数据。参考文章:http://www.sqlclub.cn/Optimi/2009-04/

GengV - 在Java的世界流浪 5714

mysql limit优化_Mysql Sql语句优化之 LIMIT

点击上方「Java有货」关注我们技术交流群添加方式+添加小编微信:372787553,备注:进群带您进入Java技术交流群概述在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?这时候大家是不是都会想到分页查询?确实是这样接下来让我们来看看Mysql Limit的那些事LIMIT语法MySQL的limit基本用法很简单。limit接收1或2个整数型参数,如果是...

weixin_39641236的博客 170

Mysql Sql语句优化之 LIMIT

添加小编微信带您进入Java交流社区 小编微信:372787553 备注进群 概述 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢? 这时候大家是不是都会想到分页查询?确实是这样接下来让我们来看看Mysql Limit的那些事 LIMIT语法 MySQL的limit基本用法很简单。limit接收1或2个整数型参数,如果是2个参数,第一个是指定第一个返回记录行的偏移量,第二个是返回记录行的最大数目。初始记录行的偏移量是0。 SELECT * FROM table LIMIT.

杨海吉 800

Mysql(7)Limit 查询优化

如果我们只需要结果集中指定数量的行,请在查询中使用 LIMIT 子句,而不是获取整个结果集并丢弃额外的数据。 MySQL 有时会优化具有 LIMIT row_count 子句且没有 HAVING 子句的查询: 如果使用 LIMIT 只选择几行,MySQL 在某些情况下会使用索引,而通常它更愿意进行全表扫描。 如果将 LIMIT row_count 与 ORDER BY 结合使用,MySQL 会在找到排序结果的第一个 row_count 行后立即停止排序,而不是对整个结果进行排序。 如果使用索引进行

qq_37107851的博客 1167

limit mysql 优化_MySQL中limit优化

“终于要对MySQL优化下手了,本文将对分页进行优化说明,希望可以得到一个合适你的方案”前言分页这个话题已经是老生常谈了,但是有多少小伙伴一边是既希望优化的自己的系统,另一边在项目上还是保持自己独有的个性。有个性优化这件事是需要自己主动行动起来的,自己搞测试数据,只有在测试的路上才会发现更多你未知的事情。本文咔咔也会针对分页优化这个话题进行解读。一、表结构这个数据库结构就是咔咔目前线上项目的表,只...

weixin_30357183的博客 407

mysql的limit优化

limit http://www.zhenhua.org/article.asp?id=200 select * from table LIMIT 5,10; #返回第6-15行数据  select * from table LIMIT 5; #返回前5行  select * from table LIMIT 0,5; #返回前5行 性能优化: 基于MySQL5

willorfang的学习专栏 1409

MySQL中limit对于order by的优化

MySQL中limit对于order by的优化

weixin_43696693的博客 1318

mysql之limit查询优化

1、相关说明 准备uc_user表,给字段created_at建立索引 2、开始实验 分别执行下面两条sql select * from uc_user ORDER BY created_at LIMIT 1000,10; // 代表取出1010条数据,然后只要最后10条 select * from uc_user ORDER BY created_at LIMIT 100000,10; // 代表取出100010条数据,然后只要最后10条 结果如下图: 从上图看出查询时间差别很大,我给created_at

qq_37803406的博客 869

高性能MySql设计之查询优化(limit优化)

1        介绍 1.1     处理流程 当MYSQL 收到一条查询请求时,会首先通过关键字对SQL语句进行解析,生成一颗“解析树”,然后预处理器会校验“解析树”是否合法(主要校验数据列和表明是否存在,别名是否有歧义等),当“解析树”被认为合法后,查询优化器会对这颗“解析树”进行优化,并确定它认为最完美的执行计划。   1.2     衡量标准 MYSQL查询

caomiao2006的专栏 7023
上一篇: 西联汇款(Adsense)
下一篇: mysql查询优化方法
apache6
博客等级 码龄19年 44粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值