位置: 编程技术 - 正文

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

  • 企业持股分红
  • 个人劳务费怎么交税
  • 收到所得税退税会计怎么记账
  • 技术服务费3%
  • 滴滴出行怎么弄电子发票
  • 30人以上的企业有哪些
  • 核定征收企业股权转让所得税
  • 企业所得税表样
  • 无法收回的应收账款情况说明
  • 机器保养计入什么
  • 工程款发票开给委托方要如何处理?
  • 销售合同总金额含税还是不含税
  • 印花税这个月没交怎么办
  • 混凝土增值税政策
  • 进项发票和销项发票金额相同还需要交税金吗
  • 公司自用房屋怎样交税
  • 协会会费入账科目是哪个
  • 涂料生产企业消毒方案
  • 企业支付宝对公打款
  • 进项票认证超了怎么处理
  • 利息资本化的时点
  • 企业无形资产包括
  • win10开机会自动打开网页
  • 苹果电脑开机声音怎么关
  • 视同销售怎么做账务处理
  • 禁用的网络在哪里开启
  • 如何关闭win11系统
  • 鸿蒙系统怎么设置桌面小组件
  • 不动产分期抵扣政策
  • 发票开出后对方不付款
  • 支付的费用没有发票能入费用科目吗
  • 其他应付款余额在借方表示什么意思
  • mongodb jpa
  • 房地产企业的沙盘模型制作费会计处理
  • 怎么做外资企业赚钱
  • sload命令
  • Uncaught TypeError TypeError: Cannot set properties of null (setting ‘onclick‘)的解决办法
  • 了解的反义词
  • 公司注销后所欠债怎么办
  • 在建工程转无形资产 会计准则
  • 购买固定资产后如何处理
  • vue错误处理
  • vue3.0创建
  • php sha1加密 解密
  • 工程结算结算gbq文件怎么做
  • javascript核心技术
  • 欠别人钱可以用车抵押吗
  • 用友t6模块
  • 差旅费的进项税额需要转出吗
  • 增值税零税率和免税的范围
  • 视同小规模纳税人是有?
  • 汽车修理费用会计分录
  • 销售自己使用过的物品免税吗
  • 银行手续费未开发票前计入什么科目
  • 门诊报销是怎么报的
  • 建筑公司工程款税率
  • 固定资产的核算内容包括
  • 增值税怎么开
  • 构建固定资产的借款利息资本化文件依据
  • 预收账款过多,税务让说明原因
  • 公司控股的子公司 法人能被追加吗
  • 平均净资产是什么意思
  • windows电脑图片传到iphone
  • win8 boot manager
  • win7游戏打开没反应
  • win7系统怎么设置锁屏密码怎么设置
  • OpenGL Tutorial: (1) Setting up OpenGL with Visual Studio
  • cocos-2dx
  • ipa文件分享
  • css怎么加图标
  • firefox浏览器标识ua
  • python和js哪个好
  • vue组件互相嵌套
  • 如何让批处理文件运行不显示
  • 检测shell脚本语法错误的命令
  • unityugui优化
  • jQuery实现table中的tr上下移动并保持序号不变的实例代码
  • 国家税务总局2012年20号公告
  • 地税发票查询官网查询
  • 12333热线时间
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设