位置: 编程技术 - 正文

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

  • 年度企业所得税会计分录怎么做
  • 社保局发放的稳岗补贴怎么入账
  • 成品油红字发票开错了
  • 用友T3怎么结转上年数据
  • 出纳可以做库存库吗
  • 个人取得哪项收入需要缴纳个人所得税
  • 出口退税新旧申报
  • 电商平台收取会员费吗
  • 收财务拨款的贷款合法吗
  • 长期股权投资出售比例计算
  • 与收益相关政府补助区分总额法净额法吗
  • 扣押属于纳税担保吗
  • 未认证进项税额转出
  • 税控盘年费每年都可以抵扣吗
  • 支付工人保险费计入什么科目里
  • 联想笔记本电脑官网旗舰店
  • 无形资产怎样计算折旧
  • 普通增值税发票左上角的二维码可以扫出来吗?
  • 销售费用有哪些?
  • win11系统开机密码怎么修改
  • 华为p50新款
  • ping命令测试结果
  • win10任务栏搜索如何关闭
  • uniapp监听网络状态
  • 付临时工资怎么入账
  • 联想thinkpad l380yoga
  • “Property or method “***“ is not defined on the instance but referenced during render.”报错的原因及解决方案
  • 申请代开增值税专用发票有金额限制吗
  • 没有审计报告的情况说明
  • 房产税城镇土地使用税申报期限
  • uniapp面试题必问的坑
  • ai运行环境
  • wrap激活
  • php能开发微信小程序吗
  • 小型微利企业减按25%计算应纳税所得额
  • 工会经费的使用范围有哪些
  • 残疾人保证金的滞纳金怎么计算
  • php判断是否为整数
  • 用vue-cli搭建项目
  • 破产清算不够支付员工补偿金
  • 控股子公司注销母公司账务处理实例
  • 预开发票后涨价如何进行账务处理?
  • sql使用cast进行数据类型转换示例
  • 存货报废应如何进行账务处理
  • 企业所得税实施条例第22条
  • 本年利润在明细里怎么填
  • 人力成本费用率和人工成本利润率
  • 企业进出口总额
  • 哪些企业需要社工
  • 应付职工社会保险费计入什么科目
  • 实收资本调账怎么调
  • 企业商品销售收入确认条件
  • sqlserver1053怎么解决
  • linux下多个mysql5.7.19(tar.gz)安装图文教程
  • Win10 Build 17035自制64位中国版十合一ISO镜像下载地址
  • ubuntu18.04更新到20.04
  • 系统图工具
  • xp的兼容模式
  • exe什么意思?
  • 用xp系统打造
  • ubuntu系统安装教程
  • 电脑w7系统怎么保存图片
  • 安装yum的命令
  • lsass.exe是什么病毒
  • Win10 Mobile Build 10586.xx将持续更新 WP8.1用户可直升最新版
  • win8.1应用商店不能装软件,提示此项应用不在提供
  • win8系统怎么设置桌面图标
  • javascript ()
  • viewpager2+fragment
  • npm yarn命令对比
  • unity3d怎么控制人物移动
  • javascript create
  • Android-Universal-Image-Loader 图片异步加载类库的使用
  • python函数详解
  • 查税务在哪里查
  • 国税地税征管
  • 土地增值税有哪些税收优惠
  • 印花税怎么计提和结转
  • 写给税务局的表扬信
  • 个体经营所得申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设