位置: 编程技术 - 正文

MySQL在关联复杂情况下所能做出的一些优化(mysql关联语句)

编辑:rootadmin

推荐整理分享MySQL在关联复杂情况下所能做出的一些优化(mysql关联语句),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql关联查询使用什么关键字,mysql关联语句,mysql关联关系,mysql数据库之间关联,mysql关联语句,mysql关联关系,mysql关联关系,mysql表关联有几种,内容如对您有帮助,希望把文章链接给更多的朋友!

昨天处理了一则复杂关联SQL的优化,这类SQL的优化往往考虑以下四点:

第一.查询所返回的结果集,通常查询返回的结果集很少,是有信心进行优化的;

第二.驱动表的选择至关重要,通过查看执行计划,可以看到优化器选择的驱动表,从执行计划中的rows可以大致反映出问题的所在;

第三.理清各表之间的关联关系,注意关联字段上是否有合适的索引;

第四.使用straight_join关键词来强制表之间的关联顺序,可以方便我们验证某些猜想;

SQL:执行时间:

这条SQL查询实际只返回了一行数据,但却执行耗费了ms,查看执行计划:

可以看到执行计划中有两处比较显眼的性能瓶颈:

由于d是left join的表,所以驱动表不会选择d表,我们在来看看a,b,c三表的大小:

由于b表的数据量大于其他的两表,同时b表上基本没有查询过滤条件,所以驱动表选择B的可能排除;

优化器实际选择了a表作为驱动表,而为什么不是c表作为驱动表?我们来分析一下:

第一阶段:a表作为驱动表a?>b?>c?>d:(1):a.jg_id=b.jg_id—>(b索引:PRIMARY KEY (`JG_ID`,`YH_ID`) )

(2):b.yh_id=c.yh_id—>(c索引:PRIMARY KEY (`YH_ID`))

(3):c.yh_id=d.yh_id—>(d索引:PRIMARY KEY (`JS_DM`,`YH_ID`))由于d表上没有yh_id的索引,索引在d表上添加索引:

MySQL在关联复杂情况下所能做出的一些优化(mysql关联语句)

执行计划:

执行时间:

在d表上添加索引后,d表的扫描行数下降到行(最开始为: )

第二阶段:c表作为驱动表

d^|c?>b?>a由于在c表上有yh_dm过滤性很高的筛选条件,所以我们在yh_dm上创建一个索引:

添加索引:

查看执行计划:

执行时间:

在c表上添加索引后,索引还是没有走上,执行计划还是以a表作为驱动表,所以我们这里来分析一下为什么还是以a表作为驱动表?

1):c.yh_id=b.yh_id—>( PRIMARY KEY (`JG_ID`,`YH_ID`) )

a.如果以c表为驱动表,则c表与b表在关联的时候,由于在b表没有yh_id字段的索引,由于b表的数据量很大,所以优化器认为这里如果以c表作为驱动表,则会与b表产生较大的关联(这里可以使用straight_join强制使用c表作为驱动表);b.如果以a表为驱动表,则a表与b表在关联的时候,由于在b表上有jg_id字段的索引,所以优化器认为以a作为驱动表的代价是小于以c作为驱动板的代价;所以我们如果要以C表为驱动表,只需要在b上添加yh_id的索引:

2):b.jg_id=a.jg_id—>( PRIMARY KEY (`JG_ID`) )

3):c.yh_id=d.yh_id—>( KEY `ind_yh_id` (`YH_ID`) )执行计划:

执行时间:

可以看到执行计划中的rows已经大大降低,执行时间也由原来的ms降低到0 ms级别;

对MySQL子查询的简单改写优化 使用过oracle或者其他关系数据库的DBA或者开发人员都有这样的经验,在子查询上都认为数据库已经做过优化,能够很好的选择驱动表执行,然后在把该

分析MySQL中优化distinct的技巧 有这样的一个需求:selectcount(distinctnick)fromuser_access_xx_xx;这条sql用于统计用户访问的uv,由于单表的数据量在G以上,即使在user_access_xx_xx上加上nick的索

通过实例认识MySQL中前缀索引的用法 今天在测试环境中加一个索引时候发现一警告root@test::altertablearticledropindexind_article_url;QueryOK,rowsaffected(.sec)Records:Duplicates:0Warnings:0root@test

标签: mysql关联语句

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

上一篇:MySQL的id关联和索引使用的实际优化案例(mysql关联查询原理)

下一篇:对MySQL子查询的简单改写优化(mysql子查询效率如何)

  • 未确认融资费用和长期应付款
  • 公司给员工代办失业证
  • 增值税申报怎么填写报表
  • 本期收入和本期减除费用
  • 计提所得税比实际缴纳的少
  • 税捷财税官网
  • 年末结转净利润
  • 前期费用包括哪些,占总投资的比例
  • 开票可以只开大数据吗
  • 其他应付款为负数
  • 出售本月转入处置的固定资产应交税费
  • 假发票是怎么开出来的?
  • 土地增值税怎么做账
  • 个体户没有营业执照怎么举报
  • 公司办理个人所得税退税
  • 跨月销项负数发票怎么做账
  • 在职员工 开公司
  • 走pos对公账户扣多少手续费
  • 垃圾清运属于什么大类
  • 装载u盘
  • 职工福利费扣除率是多少
  • wordpress文章缩略图
  • 搜索框无法搜索内容
  • 支付广告费会计怎么做账
  • php对象缓存
  • php是面向对象语言吗
  • 资产减值会计处理论文
  • 外贸企业进料加工复出口退税政策
  • php正则表达式匹配,返回原因
  • node_sass
  • 机动车发票冲红太多会怎么样
  • 销货退回与折让属于什么科目
  • 金税盘怎么取消
  • 国有资产无偿划转的会计处理
  • 一般人财务报表季报还是月报
  • 营改增之后增值税怎么算
  • 织梦系统
  • 一般纳税人接受的下列服务中不得抵扣进项税额的有
  • 品种法成本核算的程序有哪几步?
  • 预收账款挂多久确认收入
  • 营改增后建筑企业如何正确开具发票
  • 工会支付职工福利费做账
  • 上市公司发放现金的规定
  • 申请刻制发票专用章要求
  • 应收账款平均余额怎么理解
  • 社保补差什么流程
  • 代垫个税费怎么做账
  • 成本不够如何计算出来
  • 待摊费用年底能够有余额么
  • 已认证未抵扣的进项税转出账务处理
  • 哪种飞机票可以抵扣进项税
  • 递延所得税转回税率不一致
  • 电话费计入什么二级科目
  • 如何管理固定资产账户
  • 结账前要做哪些准备工作
  • 建账的三个基本步骤
  • mysql数据库自动重启
  • mysql登陆error2002
  • linux常用基本命令pwd
  • apache 443
  • u盘背景图片设置方法
  • win7打印无反应
  • win8电脑键盘全部失灵怎么办
  • windows10 rs4
  • 学习英语
  • exception继承
  • sed 处理多行
  • python数据结构与算法分析 第2版(图灵出品)
  • .css
  • 详解linux设备
  • 用python做
  • jquery示例
  • jQuery解析XML 详解及方法总结
  • js effect
  • node.js权威指南
  • android 控件居中
  • 安卓手机电驴
  • 长沙市社保中心主任
  • 网上申报成功后才能去体检吗
  • 如何用微信进行社保认证
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设