位置: 编程技术 - 正文

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

  • 离岸价的含义
  • 人工费用的核算例题
  • 债权投资借贷方
  • 现金流量补充表的编制
  • 境外所得抵免限额小于实际缴纳
  • 普通发票作废影响额度吗
  • 其他权益工具和交易性金融资产
  • 工资费用分配表属于什么凭证
  • 母公司收取服务费请示
  • 应纳税调增调减会计分录
  • 外贸业务收境外人民币
  • 减免的教育费附加和地方教育费附加怎么做分录
  • 补去年收入的会计分录
  • 增值税发票过期了税金怎么办
  • 事业单位其他收入的会计分录
  • 半成品成本核算 一般企业怎么核算
  • 生产车间计提折旧分录
  • 零税率购房发票
  • 哪些发票可以抵扣成本
  • 金税三期房产税更正申报怎么弄
  • 汇算清缴时资产总额如何计算
  • 个人劳务费怎么开票
  • 实际缴纳的增值税税额怎么算
  • 集团公司收取管理费是否可以税前列支
  • 政府专项拨款账务处理
  • 电脑屏幕突然黑屏怎么回事
  • win10任务栏不显示最近
  • 怎样提高网速呢知乎
  • 如何备份计算机的注册表
  • 什么级别的cpu需要水冷
  • 金鱼草的养殖方法和注意事项有哪些
  • php中cookie的值存储在哪
  • 盘亏固定资产累计折旧
  • 房屋产权置换协议书范本
  • 电影剧本如何代替
  • unigui 小程序
  • 营改增后土地增值税如何计算
  • 超图的应用举例
  • bind函数错误
  • merge命令合并不了数据
  • 租店铺需要什么流程需要注意什么事项?
  • linux服务器架设指南
  • 增值税年底抵扣
  • 餐饮公司分店营销方案
  • 企业期末预收账款怎么算
  • mysql如何开启
  • sql server自动生成行号
  • centos php-fpm
  • 代销手续费怎么做账
  • 股权转让的资料有哪些
  • 待认证进项税额期末怎么办
  • 什么叫发票分割单
  • 公司销售部门购买产品
  • sql语句大全实例教程.pdf
  • mysql group order
  • win10预览版和正式版区别
  • win10服务怎么打开
  • 电脑主板bios设置图解
  • upd什么意思
  • linux如何开启ftp
  • win7系统为什么玩不了游戏
  • win7如何删除无法删除的文件
  • windows8锁屏
  • win10 edge浏览器崩溃
  • windows 10微软
  • linux远程gui
  • 在win7上加装一个硬盘不显示
  • perl 教程
  • Unity3D游戏开发培训课程大纲
  • margin使用
  • 关于Python的lambda函数,以下选项
  • jquery基本语法
  • angular卸载
  • jquery中的选择器有哪些
  • 商标注册图形查询
  • 133平房子公摊36.88
  • 进出口货物的报关时限
  • 税务局文化品牌
  • 地税局跟税务局有什么区别
  • 农业企业制造费用包括哪些
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设