位置: 编程技术 - 正文

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

  • 印花税需要每月缴纳吗
  • 进项税转出包括什么
  • 税务申报退税
  • 平均税额怎么算
  • 投资利税率包括所得税吗
  • 定额税率定义
  • 医药行业发票税率
  • 小额转款
  • 利润表的上期金额是指全年吗
  • 工人工资可以直接记主营业务成本吗
  • 哪些发票可以冲红票
  • 境内a上市公司非限售股股票转让所得怎么交个人所得税
  • 应收账款坏账计提比例变更
  • 专项应付款如何核算
  • 企业所得税中的不征税收入有哪些
  • 持有至到期投资属于什么科目
  • 建筑安装税务分类编码为多少?
  • 企业所得税收入是什么意思
  • 购进一台空调会计分录
  • 总资产周转率ttm
  • 管理费用属于什么现金流量项目
  • 如何返还股东的出资款
  • 支付法院执行款的账务处理
  • 在windows7操作具有什么特点
  • 火车票可以报账吗
  • win10怎么清理剪切板
  • 存货质量是什么意思
  • 债转股适用范围
  • PHP:stream_register_wrapper()的用法_Stream函数
  • PHP:pg_set_error_verbosity()的用法_PostgreSQL函数
  • neoDVDstd.exe - neoDVDstd是什么进程 有什么用
  • logd是什么进程
  • php imagettftext
  • 利润分配的账务处理如何做
  • php实验报告
  • 资产负债表中各项目的期末数应根据各账户
  • ts中如何定义一个数组
  • php微信公众号开发反回图片怎么弄的学校
  • 稳岗补贴什么时候到账
  • 土地出让与土地划拨有什么区别
  • 织梦cms要钱吗
  • mongodb快速入门
  • 公司性质不一样的重名可以吗
  • 物流辅助服务是
  • 同花顺电脑版怎么看财务报表
  • 个人所得税计算方法及抵扣方法
  • 会计科目是怎么来的
  • sql server 2016 sp3
  • ibm.data.db2
  • 当月没生产有生产费用怎么结转
  • 员工出差报销补贴政策
  • 残值收入交税吗
  • 新准则房地产企业收入确认时间
  • mysql怎么实现
  • mysql数据库基础与实践课后答案
  • ubuntu每次开机都会进入grub
  • macbookzen
  • Mac系统中使用QuickTime Player实现屏幕录像图文教程
  • linux文件系统inode
  • linux中ftp
  • windows8.1开机
  • 运维是什么的
  • python图论算法
  • perl脚本输出变量
  • opengl绘制坐标轴
  • jquery弹出新窗口
  • cdn ajax
  • jQuery实现textarea自动增长宽高的方法
  • js domcontentloaded
  • python解析excel文档
  • jQuery插件是什么
  • Javascript Object.extend
  • python内置数据结构有哪些
  • 包装物押金收入含税吗
  • 天津市车船税收费标准2023
  • 广东省电子税务局app下载官网
  • 广西税务申报增值税时为什么打开表格时总是加载中
  • 四川省网上税务局怎么登录
  • 税务局审计整改的信息
  • 税额差怎么计算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设