位置: 编程技术 - 正文

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

  • 减免税款递延收入怎么算
  • 赠与税是什么税种
  • 中国税务师协会税务师官网
  • 酒店摆放物品是什么
  • 公司购入的财务怎么做账
  • 新公司成立需要刻哪些章
  • 年末未分配利润怎么处理
  • 小规模升一般纳税人怎么操作
  • 增值税进项税额不予抵扣的项目包括
  • 应付账款坏账准备的会计分录
  • 单位发生的业务怎么做账
  • 财务人员最重要的三点
  • 税控设备可以跨省销售吗
  • 合伙企业购买股票产生的收益需要缴纳税款吗
  • 不锈钢交几个点税
  • 工会是否具有有法律效力
  • 一般纳税人以清包工方式
  • 注销税务财务报表模板
  • 不开票收入怎么报税
  • 消费税的附加税和增值税的附加税
  • 公司有好多没有股份的人
  • 单位公积金对账单
  • UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
  • msmpeng.exe是什么进程
  • 复制快捷键ctrl+c
  • 表单的基本语法格式
  • 退回银行本票会计分录
  • 国外进口增值税税率
  • 工会经费如何在网上购物吗
  • php xml转数组
  • php过滤sql注入
  • php数组分类
  • 金税盘锁死能正常报税吗
  • 员工旅游费的税率是多少
  • 物业水电费可以差额征税吗
  • 相机4244
  • 公司账户转法人账户
  • vue setstate
  • .net core中间件原理
  • php异常处理方法
  • php读取文件内容的方法和函数
  • 减资的程序
  • 企业职工薪酬如何确定
  • 个人提供劳务怎么去税务局开发票
  • 手机充值如何开公司发票
  • mysql乱码产生原因
  • 动态sql怎么执行
  • 商铺转让费的会计分录
  • 运输公司燃油费占比
  • 境外汇款收款人承担手续费
  • 公司用印制度
  • 无偿调入的固定资产怎么记账
  • 建设单位罚款
  • 企业计提五险一金会计分录怎么写
  • 银行对账单和存折的区别
  • 冲以前年度成本分路
  • 公交车经营权转让案例
  • 购税盘怎么做会计分录
  • 建筑安装行业都需要什么资格证书
  • 未确认融资费用是什么类科目
  • 加盟费开发票
  • 新政府会计制度固定资产核算
  • linux系统中用户账户有哪些分类
  • mssecsvc是什么进程
  • win7系统IE浏览器版本
  • hottray.exe是什么进程 有什么作用 hottray进程查询
  • dosbox批处理
  • Perl实现高水线算法(解决多值比较问题方法)
  • node执行js文件的命令是什么
  • cocos2dx android横屏竖屏设置
  • eclipse怎么查看项目的位置
  • 获取某个div的高度
  • adb push、adb install 和强制安装
  • jquery获取某个属性的值
  • ruby format
  • javascript整数类型
  • android实现一个闹钟程序
  • js实现省份和市级联动
  • 企业所得税要在几号之前申报
  • 卖钢材交哪些税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设