位置: 编程技术 - 正文

在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优化总结)

  • 公司向法人借款会计分录
  • 超市的库存商品分类混乱怎么看出来的
  • 抵扣认证的发票怎么查询
  • 费用已付发票未到的预算会计分录
  • 一般纳税人的税率是多少个点
  • 开出商业承兑汇票到期会计分录
  • 为什么纳税申报
  • 研发技术服务属于什么费用
  • 出售无形资产的净损失
  • 销售自用旧机动车辆的税务处理
  • 个人独资企业服务中心是干嘛的
  • 外购原材料自用要进项转出吗
  • 抵债资产计提折旧怎么算
  • 财务软件怎样结转销售成本
  • 免税农产品如何填报企业所得税季报
  • 子公司算总公司员工吗
  • 工厂采购原材料销售给外贸公司
  • 外汇银行会计特殊处理方法如何理解?
  • 企业如何做好税务管理工作
  • 汇算清缴需要补税
  • 简单内帐利润报表一目了然
  • 购买小汽车增值税发票金额开错
  • 资产处置收益的含义
  • 专票入库单金额怎么算
  • 投资者与被投资者的名人
  • qqprotect.exe是什么进程?qqprotect.exe怎么禁止自动启动?
  • 获得administer权限
  • 事业单位财政直接支付了费用忘记入帐
  • bios怎么更改硬盘
  • 银行手续费发票税率
  • 如何解决win7系统蓝牙接收模块影响电脑蓝屏
  • php各大框架以及实现原理
  • 长期借款的概念
  • linux 临时修改环境变量
  • 结转本月发生的费用
  • PHP:zip_entry_open()的用法_Zip函数
  • vue app打包
  • form表单提交数组
  • php addslashes函数
  • 企业年金如何缴纳计算方法
  • 会计中持有至到期投资是什么意思
  • 两套账目
  • 33.JavaScript映射与集合(Map、Set)数据类型基础知识介绍与使用
  • SpringBoot+Vue实现在线商城系统
  • php array search
  • php 压缩文件
  • 发票中食品属于哪一类
  • 代扣费用会计分录
  • 违约拒绝赔偿怎么办
  • mysqlbinlog命令详解
  • 物流货物丢失赔偿按照运费10倍
  • 服装类发票可以抵扣哪些
  • 蔬菜开发票到哪里开呢?
  • SQL SERVER 2000 9003错误的解决方法(只适用于SQL2000)
  • 本年利润的会计编码
  • 应交税费会计分录完整版
  • 企业所得税税前扣除管理办法2018
  • 小规模纳税人企业所得税2023
  • 新成立企业多长时间可以销售小微企业
  • 律师事务所的所属行业是什么
  • 小额贷款行业新规
  • 全资子公司可以转让吗
  • 利息收入算什么
  • 公司向法人借款会计分录
  • 扣除土地价款
  • 新成立的公司工会经费需要交吗
  • 材料报废 开什么发票
  • java连接sqlserver数据库对象名无效
  • sql数据库对象
  • Mysql中几种插入效率的实例对比
  • windowsserver2008密码规则
  • 怎么看mac的硬盘型号
  • 在windows中下列叙述正确的有
  • Ubuntu After Install 2.6 帮助你安装 Ubuntu 常用软件
  • linux shell命令大全
  • 超级硬盘数据恢复软件v2.7
  • python字典有什么用
  • javascript基础书
  • 如何办理委托银行卡业务
  • 北京市地方税务局在哪
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设