位置: 编程技术 - 正文

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

  • 以旧换新销售商品
  • 个人开发选项
  • 珠宝饰品在什么地方买
  • 法定免税项目包括
  • 小规模纳税人出售使用过固定资产
  • 受让应收账款的账务处理
  • 以货换货要开发票吗
  • 要补交税怎么办
  • 以前年度损益调整影响本年利润
  • 车辆停放服务属于交通运输服务吗
  • 外贸企业出口退税计算公式
  • 存货期末结存量的公式
  • 补计提个税的会计分录
  • 提取法定盈余公积比例
  • 交易性金融资产的交易费用计入哪里
  • 增值税发票小规模2023
  • 关于发票入账的会计分录
  • 什么时候计入其他综合收益什么时候计入投资收益
  • 销售费用的运费算不算增值税
  • 企业购买理财产品收益会计分录
  • 一级建造师继续教育
  • 土地转让怎么缴纳增值税
  • 可抵扣亏损递延所得税资产
  • 华为手机麦克风在哪里
  • 华硕笔记本预装win10改装win7,有图文教程
  • 微软推出windows1
  • 银行承兑汇票质押率90%
  • 存货的毁损通过什么科目核算
  • Win11 Build10.0.22000.51预览版正式推送 (附完整更新日志)
  • 销货方发票红冲操作流程
  • 受托代销商品会计科目
  • csrsv.exe是什么
  • framework 4 client profile 不动
  • 股东借款产生的利息可以税前扣除吗
  • linux如何搭建
  • php面向对象编程
  • 安装elipse教程
  • inature前沿
  • dpkg deinstall
  • 退货可以开红字发票吗
  • 公司车辆退保进哪个科目
  • 公司给部分员工长期停工怎么办
  • 一般纳税人购入需要安装的生产设备,其入账价值包括
  • 收到发票未收到货物
  • 个体工商户纳税人类型怎么填
  • 弥补亏损怎么做分录
  • 对公账户收到钱都要开票吗
  • 违约金 专票
  • 资本公积怎么计提
  • 银行利息回单怎么报账审核
  • 发票冲红的会计怎么处理
  • 会计凭证装订后应当加贴封条
  • 发票抬头是个人税号怎么填
  • sql的理解
  • sqlserver2019的使用
  • uefi模式怎么装机
  • ubuntu怎么禁用nouveau
  • linux系统
  • thinkpad 8高配版
  • linux快捷命令
  • 打开 itunes
  • win8怎么下载qq
  • windows7怎么设置右键菜单
  • win7系统怎么禁止更新
  • android入门教程
  • ubuntu搭建安卓环境
  • unity协程yield
  • scrapy爬虫教程
  • java密码强度检验工具
  • unity shader lod
  • js获取form表单数据并显示
  • unity gpu优化
  • javascript中checkbox使用方法简单实例演示
  • JavaScript中的NaN代表什么
  • 企业代缴房产税可以入账吗
  • 免租期算租赁期限吗
  • 环保税征税范围44项
  • 如何在国税电子税务平台为员工办理定制社保卡
  • 呼伦贝尔清欠办电话
  • 2021河南省中考英语听力音频
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设