位置: 编程技术 - 正文

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

  • 缴纳以前年度所得税怎么做账
  • 会计报税
  • 代开发票含税价怎么核算为不含税发票
  • 增值税专用发票明细太多怎么办
  • 结转损益管理费用在借方
  • 以现金形式收到包装物押金
  • 工程项目的存货含哪些科目
  • 资本回收系数怎么求
  • 风险纳税人还能开发票吗
  • 预缴增值税为什么记借方
  • 代开专票作废了扣了两次税怎么办?
  • 资产拍卖税费谁承担
  • 税务征收与管理
  • 个人去税务局开居间费发票
  • 船票能开发票吗
  • 工程公司安装中央空调能按混合销售计算增值税么?
  • 增值税红字发票怎么做账
  • 网上认证服务费可以全额抵扣吗
  • 有进项无销项会计分录
  • 土地使用税每个月都要计提吗
  • 个人独资企业收款码
  • 合并报表的编制主体
  • 比赛奖金支出计入什么科目
  • 所得税申报填写
  • 政府补贴物业公司
  • 进口增值税13可以抵扣多少
  • 生产性生物资产是什么意思
  • 应收账款产生的利息分录
  • 增值税普通发票和电子普通发票的区别
  • 开启共享文件夹
  • 银行定期存款账户
  • 华为手机开热点后wlan自动关闭
  • .exe是啥
  • 赔偿金要交增值税吗
  • php和mysql的联合使用
  • 常见造成账目差异的原因
  • php 序列化函数
  • 注册教育培训机构需要哪些手续
  • 哪些项目计入其他应收款
  • 一万字综述怎么写
  • 深度测试软件
  • 贴现需要什么手续
  • 怎么防止?
  • 小规模纳税人的条件
  • 租金收入如何分析
  • 服务业按什么结算工资
  • 帐载金额
  • 注册资金认缴期限一般多少
  • 简易征收预缴税率怎么算
  • 捆绑销售如何做会计处理合适?
  • 外贸公司美金账户开立要求
  • 3%减按2%征收增值税是什么意思
  • 应收利息的会计分录怎么写
  • 未开票收入怎么做账
  • 厂房违建如何处理
  • 消费满赠送活动规则
  • 备查账的登记主要以什么来表述
  • Linux环境下mysql5.7.13安装教程
  • sql导入和导出数据
  • xp恢复回收站删除文件
  • macbookpro双系统和虚拟机
  • centos彻底删除文件命令
  • winxp打开任务管理器的快捷键
  • 查看 linux版本
  • windows8设置
  • macbook内部
  • win10系统中怎么安装安卓应用
  • windows8功能设置
  • windows tcp
  • win10 edge浏览器怎样添加信任站点
  • js动态加载图片
  • Node.js中的全局变量有哪些
  • jQuery select自动选中功能实现方法分析
  • javascript document.execCommand() 常用解析
  • jquery取消单选框选中
  • Android调用系统截屏方法
  • 纳税是什么税
  • 土地增值税扣除项目金额怎么计算
  • 浙江国地税联合电子税务局哪里看收到的发票
  • 车辆购置税计入固定资产一起折旧吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设