位置: 编程技术 - 正文

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怎么恢复数据)

  • 运输公司的车辆保险费计入什么科目
  • 其他应付款包括哪些内容口诀
  • 原始凭证和记账凭证的作用分别是什么
  • 款已付未收到发票怎么开
  • 用餐补贴算在工资里面吗
  • 贴现率与现值系数的关系
  • 其他应付款太多怎么做账务处理
  • 月末在产品的原材料定额费用计算公式
  • 为职工提供免费午餐
  • 股权转让有哪些方式
  • 机器设备预付的费用计入
  • 进项税额留底月底销项税金如何结转?
  • 收到股东增资款账务处理怎么做账
  • 发票已缴销什么意思
  • 准予扣除的工会经费怎么算
  • 企业给员工发放最低生活保障
  • 公益捐赠税前扣除凭证
  • 支付给职工和为职工支付的现金
  • 营改增后还有建筑业发票吗
  • 工程款税款税率
  • 待处理财产损益的二级科目
  • 长期待摊费用涉税风险应对
  • 机票进项税额怎么申报
  • Linux如何给文件赋予内容
  • 开了红字发票销售方应怎么账务处理?
  • win10记事本怎么改字体颜色
  • 取得普通发票与专票区别
  • 宾馆一次性用品有哪些
  • 出口流程步骤
  • 收到现金股利会影响利润吗
  • 外币借款业务的特点包括
  • thinkphp3.x中session方法的用法分析
  • 发票复核和收款人未填写
  • 存货需要计算填列吗
  • lvm部署的命令
  • 计提工会经费怎么做账务处理
  • 个体开发票额度
  • 个税申报的本期收入是应发工资吗
  • 企业收到工程款会计分录
  • sqlserver还原数据库一直显示正在执行0%
  • 工会经费绩效
  • 接受捐赠如何进项
  • 债券到期收益率被定义为使债券的()
  • 房屋租赁不开发票需要交税吗
  • 预交税会计分录
  • 年末资产减值损失可以税前扣除吗
  • 本月工资未发个税能不能扣
  • 微信提现手续费多少?
  • 暂估成本估多了怎么办
  • 小规模纳税人能抵扣进项税额吗
  • Linux安装MySQL5.6.24使用文字说明
  • win7系统浏览器怎么设置
  • 如何解决windows10数据放到国外进行处理
  • 猎豹如何添加兼容性站点
  • windows server 开始菜单
  • windows崩溃后怎么修复
  • 利用()可以对系统进行全面的设置
  • 快速复制一张同样的幻灯片
  • centos 安装
  • mac的itunes怎么用
  • win7系统突然打印不了
  • win7系统开机出现英文字母
  • linux中make
  • css一般可以放在几个地方
  • unity开发用什么电脑比较好
  • 设计师的悲哀
  • android手机传感器应用程序
  • unity3d Hair real time rendering 真实头发实时渲染
  • 谈谈关于中华文明的五个突出特性
  • javascript中的splice
  • android support包
  • jQuery 3.0 的 setter和getter 模式详解
  • mac配置android开发环境
  • 广州电子税务局官网登录入口网址
  • 进口设备如何交税
  • 开票地税怎么算的
  • 广东省电子税务局app下载手机版
  • 税务局残保金征收工作汇报
  • 土地整理费用由谁承担
  • 会计专业有必要读博士吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设