位置: 编程技术 - 正文

在MySQL中使用STRAIGHT_JOIN的教程

编辑:rootadmin

推荐整理分享在MySQL中使用STRAIGHT_JOIN的教程,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

问题

通过「SHOW FULL PROCESSLIST」语句很容易就能查到问题SQL,如下:

说明:因为post和tag是多对多的关系,所以存在一个关联表post_tag。

试着用EXPLAIN查询一下SQL执行计划(篇幅所限,结果有删减):

下面给出优化后的SQL,唯一的变化就是把连接方式改成了「STRAIGHT_JOIN」:

试着用EXPLAIN查询一下SQL执行计划(篇幅所限,结果有删减):

对比优化前后两次EXPLAIN的结果来看,优化后的SQL虽然「rows」更大了,但是没有了「Using filesort」,综合来看,性能依然得到了提升。解释

在MySQL中使用STRAIGHT_JOIN的教程

对第一条SQL而言,为什么MySQL优化器选择了一个耗时的执行方案?对第二条SQL而言,为什么把连接方式改成STRAIGHT_JOIN之后就提升了性能?

这一切还得从MySQL对多表连接的处理方式说起,首先要确定以谁为驱动表,也就是说以哪个表为基准,在处理此类问题时,MySQL优化器采用了简单粗暴的解决方法:哪个表的结果集小,就以哪个表为驱动表,通常这都是最佳选择。

说明:在EXPLAIN结果中,第一行出现的表就是驱动表。

继续post连接post_tag的例子,MySQL优化器有如下两个选择,分别是:

以post为驱动表,通过status_created索引过滤,结果集行 以post_tag为驱动表,通过tag_id索引过滤,结果集行

显而易见,post_tag过滤的结果集更小,所以MySQL优化器选择它作为驱动表,可悲催的是我们还需要以post表中的created字段来排序,也就是说排序字段不在驱动表里,于是乎不可避免的出现了「Using filesort」,从而导致慢查询。

知道了来龙去脉,优化起来就容易了。头等大事是务必保证排序字段在驱动表中,所以必须以post是驱动表,于是乎「STRAIGHT_JOIN」就成了答案,它强制了连接顺序。

不过我总觉得「STRAIGHT_JOIN」这种非标准的语法属于奇技淫巧的范畴,能不用尽量不用,毕竟多数情况下,MySQL优化器都能做出正确的选择。

探究MySQL优化器对索引和JOIN顺序的选择 本文通过一个案例来看看MySQL优化器如何选择索引和JOIN顺序。表结构和数据准备参考本文最后部分"测试环境"。这里主要介绍MySQL优化器的主要执行流程

使用Python的Django框架中的压缩组件Django Compressor 为了加快网站的加载速度,我们通常要多js和css进行压缩处理。这些js和css的压缩工作如果都手动处理,费时费力。DjangoCompressor可以实现js/css的自动压缩

查找MySQL线程中死锁的ID的方法 如果遇到死锁了,怎么解决呢?找到原始的锁ID,然后KILL掉一直持有的那个线程就可以了,但是众多线程,可怎么找到引起死锁的线程ID呢?MySQL发展到

标签: 在MySQL中使用STRAIGHT_JOIN的教程

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

上一篇:在MySQL中实现二分查找的详细教程(mysql第二章)

下一篇:探究MySQL优化器对索引和JOIN顺序的选择(mysql优化总结)

  • 员工离职再入职个税人员信息该如何录入?
  • 确认固定资产减值损失
  • 员工辞退补偿金需要交个税吗
  • 企业所得税必须计提吗?什么时候计提?
  • 个体户开票超30次后如何开票
  • 小规模纳税人每季度超过30万交税
  • 资产负债表专项储备放哪个科目?
  • 居民企业核定征收企业所得税的情形有哪些
  • 如何区别文化体育业和娱乐业
  • 公司做帐成本发票怎么开
  • 劳务公司的暂估费是什么
  • 公司领导培训费怎么入账
  • 高管培训费不能税前列支
  • 注册资本的印花税
  • 房产税申报后多久缴纳税款
  • 国家税务总局2011年第25号公告
  • 水利建设专项收入怎么计算
  • 红字冲回上月收入
  • 企业所得税一般是几个点
  • 公司制作小程序定金能放在图物资吗
  • 进项税和销项税月末怎么结转
  • 进口报关单是什么样子的
  • 利用退休人员避孕措施
  • virtualbox打不开虚拟机
  • win7防火墙设置不了
  • 辅助生产车间工人工资
  • 酒店没有营业执照开业犯法吗
  • 动态壁纸怎么设置锁屏
  • 微软windows11正式版下载
  • mac怎么快速显示桌面
  • 营改增会计分录
  • 股份有限公司变更法人的流程
  • pytorch入门教程(非常详细)
  • React常见面试题
  • php日期差数
  • 劳务费开发票后还需要交个税吗
  • 行政单位捐赠会计分录怎么做的
  • 前端 组件化
  • vue引用类型
  • 前端schema
  • gpt3 模型大小
  • 固定资产没有价值怎么入账
  • 购买房屋用于出租属于投资行为吗
  • 法人和自然人有什么区别通俗一点
  • mysql联合索引使用规则
  • 股东借款作为项目投入的依据
  • 医用耗材税率是多少
  • 更正个税申报需要交滞纳金没
  • 理财产品分红和收益
  • 个人所得税分摊方式怎么填
  • SQLSERVER2008中CTE的Split与CLR的性能比较
  • 只要有销售收入就能赚钱
  • 长期闲置机器设备评估方法
  • 递延所得税资产和负债账务处理
  • 抵货款怎么做账
  • 预付账款怎么转
  • 金蝶凭证做错了已经入账怎么更正
  • 销售费用明细科目有哪些内容
  • 微软雅黑可以免费用吗
  • windows server 2008 r2离线激活
  • WIN10开启高性能模式
  • 新买的读卡器不读卡,提示放入驱动盘
  • 关闭gui引导有什么用
  • 如何使用windows 10
  • win10系统开机密码设置方法
  • linux scp命令的用法详解
  • 1.cpp执行的是什么文件
  • xp系统改win7系统设置
  • win102020h2
  • win10系统电脑怎么关机
  • windows识别码
  • cocos2dx lua android glsurfaceview 截图
  • 一键备份系统和一键还原系统
  • 安卓wifimanager详解
  • shell脚本转码
  • div自动适应宽度
  • unity ugui合批
  • jquery的选择器作用是选中某些元素
  • java 视频教程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设