位置: 编程技术 - 正文

MySQL分页优化(mysql大分页优化)

编辑:rootadmin

推荐整理分享MySQL分页优化(mysql大分页优化),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql 分页优化,mysql 分页优化,mysql uuid分页优化,mysql分页实现原理,mysql分页性能优化,mysql uuid分页优化,MySQL分页优化的其他方法,mysql分页性能优化,内容如对您有帮助,希望把文章链接给更多的朋友!

最近,帮同事重写了一个MySQL SQL语句,该SQL语句涉及两张表,其中一张表是字典表(需返回一个字段),另一张表是业务表(本身就有个字段,需全部返回),当然,字段的个数是否合理在这里不予评价。平时,返回的数据大概5w左右,系统尚能收到数据。但月日那天,数据量大概w,导致SQL执行时间过长,未能在规定的时间内反馈结果,于是系统直接报错。

一般的思路是用MySQL的分页功能,即直接在原SQL语句后面增加LIMIT子句。但请注意,虽然你看到的反馈结果只是LIMIT后面指定的数量,于是想当然的以为MySQL只是检索了指定数量的数据,然后给予返回。其实,MySQL内部实现的原理是,检索所有符合where条件的记录,然后返回指定数量的记录。从这个角度来看,直接在原SQL语句后面添加LIMIT子句只能说是一种可以实现功能的方案,但未必最优。

具体在本例中,首先我们来看一下个字段的表的统计信息:

一行大概就占2k,而Innodb默认页的大小为k,这意味着,一个页中最多可存储8行的数据。随机读的可能性大大增加。而这无疑会对数据库系统的IO造成极大的压力。

优化前

如果采用上述方案,即直接在原SQL语句后面增加LIMIT子句,下面,我们来看看它的执行情况。

首先,直接添加LIMIT子句后的SQL语句如下(已省略a1表的个字段和a2中的一个字段):

其执行时间如下:

大概执行了s,绝大部分都花费到Sending data上了。Sending data指的是服务器检索数据,读取数据,并将数据返回给客户端的时间。

关于上述执行结果,有以下几点需要说明:

1. 这是SQL语句多次执行后的结果,这样就可以排除结果缓存的影响,事实上,每次查询的时长都是s左右。

2. 为什么选用的是limit ,,而不是0,,这个主要是考虑到对于LIMIT子句来说,越到后面,分页的成本越高。基于此,选择了中间值来作为分页的结果。

该语句的执行计划如下:

优化后:

MySQL分页优化(mysql大分页优化)

优化的思路:

只对该表的主键进行分页,然后用返回的主键作为子查询的结果,来检索该表其它字段的值。

改写后的SQL语句如下:

其执行时间如下:

大概3s多,比第一种方案快了差不多倍,效果显著。

下面来看看其执行计划(explain extended)

总结:

1. 改写后的语句原本如下:

但MySQL报以下错误:

需再增加一个嵌套子查询,

比如这样的语句是不能正确执行的。

但是,只要你再加一层就行。如:

这样就可以绕开limit子查询的问题。 问题解决。

2. 如果想查看MySQL查询优化器等价改写后的SQL语句,可首先通过explain extended得到具体的执行计划,然后通过show warnings查看。

具体在本例中,等价改写后的SQL语句如下:

与设想中的执行顺序一致~

3. 如何查看MySQL语句各步骤的执行时间。

标签: mysql大分页优化

本文链接地址:https://www.jiuchutong.com/biancheng/321303.html 转载请保留说明!

上一篇:快速实现MySQL的部署以及一机多实例部署(mysql简单操作)

下一篇:如何恢复MySQL主从数据一致性(mysql怎么恢复数据)

  • 减免税流程
  • 以土地投资入股是否需要缴纳增值税
  • 不是公司的车能抵扣进项吗
  • 企业所得税税前扣除政策
  • 其他应收款收到发票怎么写会计分录
  • 赞助费账务处理
  • 接受劳务是进项还是销项
  • 投入的流动资金函怎么写
  • 对方把发票丢了可以重开吗
  • 所有者权益的利得和损失
  • 提前退休获得一次性补贴要交个人所得税吗?
  • 进项发票可以不入账吗
  • 红字发票可用于入账吗
  • 合理工资薪金的确认原则
  • 如何办理临时经营纳税人设立登记
  • 转出未交增值税在借方是什么意思
  • 什么时候计提减值
  • 收到汽车保险赔款怎么做账
  • 公益性捐赠专用会计科目
  • 地产商自持是什么意思
  • 金融企业贷款利率
  • 公司交一部分社保个人还要交多少钱
  • 购入样品账务处理
  • 金蝶k3固定资产反结账
  • 销售购进材料会计分录
  • 关于解决经费问题的请示
  • 拆迁安置房如何更名
  • win11 组策略
  • windows10我得电脑
  • linux怎么设置读写权限
  • 汽车维修行业会计分录
  • 结转以前年度本年利润会计分录
  • 对公贷款利息支付
  • vue foreach is not a function
  • winform开发技术有哪些
  • 在vue3项目中使用vue2
  • 进口货物没有发票怎么入账,报税时怎么填
  • HTTP Tunneling (HTTP Proxy Socket Client)
  • 个税申报系统升级要多久
  • 发票金额与实际不符
  • 电子产品报废清理是否缴纳教育附加税
  • 施工企业的内部往来
  • 个体户给对方公司开发票会怎样
  • 触发器失败是什么意思
  • 开票机号可以随便填吗
  • 租赁费的增值税可以抵扣吗
  • 以前年度损益调整结转到哪里
  • 利润表中利息费用包括手续费吗
  • 内账会计的主要工作
  • 什么时候开始取卵
  • 以现金形式发工资违法吗
  • 购买原材料无法准确划分用途的进项税额怎么抵扣
  • 洗车发票税目
  • 非流动资产基金对应的新科目
  • 小规模纳税人开票限额是多少
  • 退回上年度企业所得税
  • 保本理财产品如何赎回
  • 年数总和法和双倍余额递减法的公式
  • sql中索引怎么使用
  • [视频]看科学家如何将纯净水变成金属
  • linux mds
  • 如何调整输入法框的大小
  • win10周年更新版是什么意思
  • win10系统怎么设置电脑密码
  • window10 .net3.5
  • win7系统每次关机都安装更新
  • 隐藏网络怎么连接电脑连不上
  • jquery编程
  • perl中qw
  • jquery图片轮播无缝连接
  • 深入理解ts
  • javascript的简介
  • jQuery实现Select左右复制移动内容
  • jquery实现点击按钮
  • python的了解
  • python 包 __init__
  • 国家税务局湖南电子税务局登录
  • 专票怎么查询已开记录
  • 金华市税务
  • 车辆购置税去哪个税务局交
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设