位置: 编程技术 - 正文

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子查询效率如何)

  • 坏账准备要写到明细账里面吗
  • 金税盘入账的会计分录
  • 计提所得税是在结转损益之前还是之后
  • 申报更正日期改变会导致逾期申报吗
  • 耕地占用税的纳税人是谁
  • 地下建筑物应该怎样缴纳城镇土地使用税?
  • 购货无法取得发票财务如何处理
  • 负债必须通过转让来清偿
  • 编制竣工结算的具体增减内容有哪几个方面?
  • 接受投资转入的货物
  • 子公司打钱给母公司
  • 通用机打发票上没有税率
  • 请问什么是全员安全生产责任制
  • 企业计提的工资薪金支出可以在税前扣除
  • 工资预支怎么做账
  • 公司销售商品怎么做分录
  • 将外购商品用于在建工程计入固定资产成本吗
  • 公司如何为员工缴纳社保
  • 出口发票上的汇率按哪个开?
  • 个税手续费返还政策文件
  • 期末进项税额和销项税额都有余额
  • MacOS Big Sur 11.3网页怎么设置时间限制?
  • 货物价格如何确定
  • php string
  • 累积带薪缺勤的例题
  • 应付账款周转天数越大说明什么
  • islp2sta.exe - islp2sta是什么进程 有什么作用
  • 非货币性资产交换的记忆口诀
  • 点云目标检测数据集
  • 资本公积转增股本需要缴纳个人所得税吗
  • 一头公牛和一头母牛,答五个字
  • 企业出售房产土地增值税怎么计算
  • vscode eslint vue
  • 数据库读写异常
  • 编制资产负债表的基础
  • 滑模控制理论与应用研究pdf
  • 新个人所得税起征点2023
  • 未开票要交增值税吗
  • 3月1日前包括什么意思
  • python chess库
  • 织梦森林官网
  • 金融商品转让如何确定销售额
  • 物业增值服务主要有哪些
  • 开具免税的发票,"税率"栏该如何填开?
  • 财务报表漏报了会影响领票吗
  • 发票定额 超过怎么办
  • 以前年度损益调整在利润表中怎么填
  • 房地产企业拆迁补偿费入账要求
  • 开办费用怎么处理
  • 公司股权变更如何合理避税
  • 公司支付的劳务费如何走不用交税
  • 2018年所得税率
  • 公允价值变动损益
  • 增值税起征点有多少
  • 汇算清缴缴纳的所得税怎么做账
  • 无形资产入账价值包括费用化支出吗
  • 外籍人员个税汇算清缴流程
  • 企业中征码怎么查询
  • 哪些资产减值损失一经计提不得转回
  • 餐饮行业招聘方案
  • mssql查询语句
  • Windows下MySQL 5.7无法启动的解决方法
  • 微软推送windows 11
  • win10电脑补丁 kb5000802
  • 如何删除win7系统自带游戏软件
  • 旅游软件页面
  • kb4592449-windows安全每月质量汇总
  • gta4支持win10
  • Extjs4 类的定义和扩展实例
  • perl的chomp
  • shell脚本可以使用的引号
  • js跨域请求json数据
  • unity3d ik
  • linux shell脚本攻略(第3版)
  • js实现自定义打印
  • flappy bird攻略
  • 工行网银如何申请发票
  • 关注龙江医保
  • 苏州相城离苏州市区有多远
  • 四川省地方税务局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设