位置: 编程技术 - 正文

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

  • 新建厂房装修费是否计入固定资产
  • 税务行政复议包括必须复议自由复议和选择复议三种类型
  • 农村合作社怎么挣钱
  • 应付账款超过三年未付
  • 所得税年度纳税申报表 从业人数怎么填
  • 手撕票几个点
  • 单位和职工个人缴费基数如何确定的规定
  • 丢失增值税发票最新处理办法
  • 记载资金的账簿要交印花税吗
  • 股东分红利息
  • 融资租赁咨询服务合同需要交印花税吗
  • 外地报销怎么报
  • 土地前期开发费用计征契税
  • 出口退税进项发票稽核
  • 以前的固定资产现在做账怎么入账
  • 新建账套应收账款怎么填客户
  • 数量金额式适用于哪些科目
  • 虚开发票对所得税的影响是怎样的?
  • 没有收到发票的支出可以做成本吗
  • 地方教育费附加减免政策
  • 旅游休闲用地
  • 其他应付款需要做预算会计吗
  • 预收的销售商品货款通过什么科目核算
  • 收到雇主责任险发票计入什么科目
  • 贸易公司未开票收入要报税吗
  • 对子公司计提减值准备影响合并利润吗
  • 房产税发票可以抵扣吗
  • 分支机构能否核定企业所得税
  • 铁路改道作业的流程
  • 出口茶叶需要什么资质
  • 公司税务风险怎么解决
  • linux中!
  • php date_diff
  • 增值税发票月末怎么账务处理
  • 写入缓存策略无法更改
  • 售后租回怎么理解
  • 为什么筹建期间的开办费不属于资产
  • 编译原理第三版课后答案
  • css盒子模型怎么做
  • 基于车联网
  • js正则用法
  • 金税盘可以全额抵税吗
  • 每季度报税什么意思
  • 茶叶开一般发票(非增值税发票)是多少个点的?
  • 债权收益权转让
  • mysql修改表结构会锁表吗
  • 所得税的应税所得额
  • 个体商户个人所得税怎么算
  • 房地产企业收到定金是否要预缴税款
  • 混合销售行为的例子
  • 税控盘百科
  • sql server s
  • 承包经营的承包人工资能税前扣除吗
  • 施工一个月多少钱
  • 宣传费税前扣除什么意思
  • 建筑业预缴税款怎么退税
  • 事业单位的服务期
  • 定额发票收入怎么样确定
  • 手工账明细账怎么登记
  • 建账基本要求
  • mysql Sort aborted: Out of sort memory, consider increasing server sort buffer size的解决方法
  • 手动防止Ping攻击方法(无需防火墙)
  • linux常用命令修改
  • windows8.1升级win10
  • P2P Networking2.exe - P2P Networking2是什么进程 有什么用
  • linux查看rpm是否安装
  • win10周年版
  • win10系统关闭安全中心
  • sendmail邮件服务器
  • windows7 excel
  • win8隐藏的文件夹怎么找出来
  • linux文件中添加内容
  • supervisor producer
  • nodejs实战教程
  • 使用Python对SQLite数据库操作
  • android 点击按钮如果数据库有数据就更新,没有就创建
  • Android事件处理模型
  • jquery easing
  • 土地使用税申报流程图
  • 逾期未申报扣几分
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设