位置: 编程技术 - 正文

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

  • 土地增值税的扣除项目包括哪几项
  • 进口洋酒能存放多少年
  • 视同销售行为的涉税处理?
  • 白酒在哪个环节征收消费税
  • 广告公司好进吗
  • 个体户查账征收怎么交税?
  • 商业收入会计分录
  • 外购白酒用于个人销售吗
  • 错把费用计入固定资产次月如何调账
  • 股权转让时资本怎么算
  • 劳务公司差额开票的方式有哪些
  • 携程电子发票可以发到QQ邮箱吗
  • 税友每年还要交年费?
  • 起征点是什么意思举例子说明
  • 专票金额怎么计算
  • 关于金融行业的经典句子
  • 出差补贴没有发票
  • 吸收合并税费
  • 定额手撕发票怎么买
  • 客户扣款会计分录明细科目
  • 做内账收入含税吗
  • 外资公司股东要求
  • 收到服务费发票怎么做账
  • 报销招待费的会计怎么做
  • 企业庆祝建党活动
  • 为离职员工代缴社保 论
  • 提供加工服务的企业
  • 没有劳动合同不给工资怎么办
  • 浏览器播放视频加速怎么设置
  • 饭店开业请客说什么
  • wind10记事本在哪
  • macOS 11 Big Sur 开发者预览版Beta 9正式推送
  • 股权转让协议合同
  • 非货币性资产交换的记忆口诀
  • 存货核算的会计分录怎么写
  • 构造二叉排序树代码
  • 广告费可以结转几年扣除
  • 委托开发和购买开发
  • anaconda卸载干净
  • yolo v5 github
  • yolo v5 可视网络结构
  • vue全局组件和局部组件
  • php remote_addr
  • php 短信验证码
  • 购销合同印花税税率
  • 管理费用只能在借方吗
  • 预收的贷方余额表示什么
  • 工程施工会计科目是什么科目
  • 纳税人的发票填什么
  • 损益类科目都是当期损益吗
  • 其他应收款账户管理应遵循
  • 补缴以前年度所得税怎么做会计分录
  • 公司车辆做账交增值税吗
  • 报销单领款人可以不签名吗
  • 收银员长款短款什么意思
  • 没有对公业务的银行
  • 财税公司工作内容
  • 会计科目的设置原则包括( )
  • 房地产企业会计分录
  • zhp.exe是什么进程
  • windows7的使用期限
  • 怎么把ubuntu装在u盘上
  • macbook的qq怎么更换背景
  • w10运行命令在哪
  • win7自动升级失败后的处理
  • 如何自定义win键
  • win8.1系统安装
  • 如何用bat删除指定文件
  • 零磁道的重要性
  • cocos2dx怎么用
  • 很好的无光照模式叫什么
  • 用于登录
  • 关于Air端与android端的通信实现
  • js如何获取浏览器窗口大小
  • nodejs处理excel
  • 怎么做一个扇形图
  • java 视频教程
  • 国税局升迁难么
  • 集体土地征收应该有哪些文件
  • 土地增值税扣除项目金额怎么计算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设