位置: 编程技术 - 正文

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

  • 商品混凝土税率为啥是3%
  • 税金及附加需要计提吗
  • 总账会计和全盘会计的区别
  • 建筑业老项目如何界定
  • 预付的成本票计入什么科目?
  • 减免税备案登记表样本
  • 企业所得税不超过300万怎么算
  • 预估应付账款该怎么冲销
  • 代缴税款是什么意思
  • 股票收入属于按什么分类
  • 无形资产土地使用权摊销年限规定
  • 新的企业会计准则
  • 微信提现手续费最新规定
  • 经营损失计入哪类费用
  • 取得进项票当月未认证
  • 各税种会计分录
  • 企业法人信息变更
  • 预付款和现金支付的区别
  • 购车保险属于什么费用
  • 预提差率费怎么记账
  • 资产收购的特殊性税务处理方法
  • 在建工程暂估转固定资产
  • 合并报表实操视频
  • 如何正确使用储存卡
  • 公司投资理财产品
  • 建安企业享受的税收优惠2020年
  • 房租没有发票,怎么入费用?
  • 暂估入库材料分录
  • 累积带薪缺勤金额怎么算
  • 硬盘 安装系统
  • win10 批量安装软件
  • 备用金冲销的会计分录
  • unc方式
  • 华为路由器怎么设置wifi密码
  • 苏必利尔湖位置地图
  • yolov3图像识别
  • vue清空form数据再重新赋值
  • openfoam中文教程
  • md5 python3
  • 关联方计提坏账吗
  • mac的配置
  • 公司购买绿植入什么科目
  • 假退库会计分录
  • 什么经营范围可以开劳务费
  • SQL Server 2000向SQL Server 2008 R2推送数据图文教程
  • 进项税加计抵扣政策2023年
  • 其他应收款借方表示增加吗
  • 融资租赁固定资产折旧年限
  • 设计费用计入什么会计科目
  • 股东以无形资产入股是否需要缴纳个税
  • 房地产企业城建税和教育费附加怎么算
  • 存货周转次数越高好还是越低好
  • 跨年红冲收入记在本年度
  • 建筑企业结转成本能不能不分人材机
  • 不是公司股东的情况说明模板
  • 待报解预算收入给我转了钱是什么意思
  • 价税分离怎么算
  • 个体工商户的公章丢了怎么办
  • 长期待摊费用是非流动资产吗
  • Linux系统下mysqlcheck修复数据库命令(详解)
  • centos6.9关闭防火墙命令
  • win7登录不了系统界面
  • win10预览版退回正式版
  • ubuntu gvfs
  • ubuntu 16.04 u盘安装
  • pcs system
  • linux系统磁盘管理的主要内容
  • 明日之后白树高地怎么钓凤尾鱼
  • win8的ie浏览器在哪里
  • gage blocks是什么意思
  • 远程调试linux
  • 解决Extjs 4 Panel作为Window组件的子组件时出现双重边框问题
  • 网页制作颜色搭配
  • bootstrap需要学多久
  • java list和array list区别
  • unity3d 画线
  • 手机端apk反编译工具_android反编译工具
  • jquery 异步加载
  • 湖南城乡居民医疗保险咨询电话
  • 增值税运输费用税额计算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设