位置: 编程技术 - 正文

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

  • 增值税一般纳税人税率
  • 建筑公司租赁费会计分录
  • 一般纳税人进项销项抵扣如何做账
  • 影响年初未分配利润的事项
  • 所得税申报更正申报怎么报?
  • 维保税率和维修税率是多少
  • 职工薪酬会计准则
  • 公司转买旧车怎么过户
  • 增值税缴纳的罚款怎么算
  • 增值税系统技术维护费记什么科目
  • 开水电发票要增加什么经营项目?
  • 支付境外销售佣金怎么做
  • 一般纳税人开具房屋租赁费税率
  • 企业账户短信提醒可以用别人手机号吗
  • 应付供货单位的货款属于什么会计科目
  • 1697508581
  • 费用报销交通费
  • 应收票据到期收回时和未到期转让时
  • php中session和cookie的区别说法错误的是
  • 电脑系统如何安装字体
  • 公司的劳务费支出怎么做账
  • PHP:Memcached::add()的用法_Memcached类
  • 保险税前扣除比例是多少
  • 重装win7系统鼠标键盘没反应
  • 善意取得增值税专用发票 企业所得税
  • 单位和个人交付的区别
  • css静态网页制作
  • 皮丘拉湖畔的乌代布尔城市宫殿,印度 (© Chaiyun Damkaew/Getty Images)
  • 前端项目如何部署到服务器
  • 马卡雷纳大教堂
  • php逆序排列数组
  • 出售其他债权投资差额计入
  • 小规模拍卖公司怎么开票
  • 增值税税收滞纳金哪里缴纳
  • jdbc连接mysql的url怎么写
  • blockdata指令怎么用
  • 销售货款无法收到怎么办
  • 增值税一般纳税人
  • 典当公司收到房款怎么办
  • 销售折让的会计科目
  • 帝国cms移动端
  • dede插件
  • 短期借款属于经营活动还是筹资活动
  • 其他收益算主营业务收入吗
  • 净营业周期为负数
  • 如何安装sql server2022
  • 第二季度所得税表中研发费用
  • 食堂购电饭锅账务处理
  • 农副产品商贸公司如何做账
  • 商标权的入账价值有哪些
  • 融资租赁收到的租金计入什么科目
  • 研发费用的会计处理对公司经营成果的影响
  • 记账凭证如何填写样本
  • 负债清偿损益明细表计税基础怎么填
  • 水利建设基金要预缴吗
  • 采购自产自销的商品
  • ubuntu14.04安装vim
  • linux系统转换为win系统脚本
  • ahqtb.exe是啥进程 ahqtb进程信息查询
  • 如何设置让自己手机号处于关机状态
  • 电脑出现win 7 界面 然后就不动了
  • nacos监控服务
  • 网卡破解
  • win7系统计算机管理在哪里
  • nodejs 模块
  • kotlin开发教程
  • node远程ssh
  • xcopy 批处理
  • java list转set的方法
  • window.requestAnimationFrame是什么意思,怎么用
  • unity mesh编程
  • unity动画教程
  • jquery console.log
  • js面向对象是什么意思
  • 重庆市电子发票样式
  • 深圳市国家税务局电子税务局
  • 商铺转让要交哪些税费和费用
  • 江西国家税务局电子税务局官网
  • 云南2021高考改革
  • 开原航天医院官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设