位置: 编程技术 - 正文

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

  • 民非企业增值税减免账务处理
  • 存货内部交易抵消分录第二年
  • 预付款核销会计分录
  • 建筑企业购进免税苗木1000元
  • 申报更正日期改变会导致逾期申报吗
  • 交易性金融资产借贷方向
  • 企业接收捐赠计入什么科目
  • 公司清算后资产负债表与利润表
  • 停工损耗会计分录怎么写
  • 复式记账法哪本书提到过?
  • 平行式明细账
  • 是不是所有的进口药都不能报销
  • 中方人员取得的工资、薪金所得,征收个人所得税有特别规定吗?
  • 如何计算一般稳定球面腔的主要参量
  • 经办人需要承担风险盘锦交通运输破坏营商环境
  • 教育附加税怎么退
  • 工程施工购买的材料费会计分录
  • 计征所得税会计分录怎么做?
  • 项目结束,财务应该怎么做
  • 清华同方bios通用密码(thtfpc)
  • 怎样解除机房
  • 事业单位财政补助和全额拨款有什么区别
  • 医疗机构医疗服务自查报告怎么写
  • 如何开启系统设置
  • 应收账款 预收账款合并
  • 小规模纳税人冲红发票怎么报税
  • 企业汇算清缴费用
  • 莱姆 惨败
  • 小刺猬 (© lorenzo104/Getty Images)
  • 大脊山,英格兰峰区国家公园 (© John Finney Photography/Moment/Getty Images)
  • form表单中自动提交表单的按钮类型是
  • php获取ftp文件目录
  • 酒店客房收入怎么算
  • 前后端分离弊端
  • php curl_setopt
  • 应纳税所得额100-300万税率
  • 进项转出分录处理
  • 同事写了一个责任链模式,bug 无数...
  • 公司为员工代扣代缴
  • 支付银行贷款利息现金流量表填哪里
  • mysql存二进制用哪个字段
  • 外来原始凭证审核内容
  • 年末需暂估已发生的费用吗
  • 制造费用和生产成本结转
  • 抵扣是什么意思大白话...举例
  • access里面也暗含了sql
  • 一般纳税人应交税费二级科目有哪些
  • 哪些进项税额不得抵扣?
  • 金税三期升级功能2020
  • 固定资产报废废料收入要发票吗
  • 商业汇票的票样
  • 预缴增值税什么科目
  • 冲以前年度成本怎么做凭证
  • 净资产=资产-负债
  • mysql必知必会mobi
  • ubuntu怎么录音
  • fedora常用命令
  • uefimbr安装win7
  • Win10 Mobile 10572怎么更新升级? 需回滚到WP 8.1
  • 怎么更改桌面图标字体
  • Win10 TH2首个重要更新后应用商店依然存在问题
  • 表单验证插件
  • 使用jQuery获取data-的自定义属性
  • sku分析的作用
  • [置顶]马粥街残酷史
  • node+express+ejs制作简单页面上手指南
  • bat批处理文件的语句
  • 详细解读退役军人优待政策
  • angularjs2
  • python中迭代例子
  • python27文件夹
  • python中计数函数怎么用
  • html做一个新闻app首页
  • 2020宜兴市民中心营业时间
  • 一般纳税人收到普通发票怎么做分录
  • 小微企业印花税的税率是多少
  • 广东税务app申报不小心点到了不再提示
  • 香水类香精应该具备什么条件
  • 浙江增值税发票勾选认证流程
  • 文明6地球地图自然奇观位置
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设