mysql对多表关联查询使用Nested-Loop Join算法,简单总结就是通过驱动表作为入口,一层层的往内部查询,驱动表的数据量对查询效率很关键。

而对驱动表的选择,from后的表顺序并不起决定作用,mysql会根据多重因素选择最优的链接顺序。如果想自行控制链接顺序可以通过Optimizer Hints(mysql 8.0)指定。

使用saklia数据库

1.先通过一个left join的例子说明from后的表顺序对实际执行时的关联顺序不起决定作用的现象

explain

select a.rental_id, a.rental_date,b.film_id

from rental a left join inventory b on a.inventory_id = b.inventory_id

可以看到执行顺序是a>b

2.接下来,我们调换一下表的顺序

explain

select a.rental_id, a.rental_date,b.film_id

from inventory b left join rental a on a.inventory_id = b.inventory_id

从explain输出结果看,b确实到前面去了,变成了b>a

3.还没结束接着看,我们带上a的一个条件

explain

select a.rental_id, a.rental_date,b.film_id

from inventory b left join rental a on a.inventory_id = b.inventory_id

where a.rental_date >= '2005-01-19 02:18:51';

看到顺序又变成了a>b,此sql并未改变from表的顺序,只是增加了a的过滤条件

4.如果就是想将b放到第一个驱动表的位置,可以通过Optimizer Hints的JOIN_PREFIX指定

explain

select /*+JOIN_PREFIX(b) */ a.rental_id, a.rental_date,b.film_id

from inventory b left join rental a on a.inventory_id = b.inventory_id

where a.rental_date >= '2005-01-19 02:18:51';

不过JOIN_PREFIX只有mysql8.0才有,5.7并没有。除了JOIN_PREFIX还有JOIN_FIXED_ORDER、JOIN_ORDER、JOIN_SUFFIX用来指定表链接顺序

更多Optimizer Hints信息可到官网查看https://dev.mysql.com/doc/refman/8.0/en/optimizer-hints.html

mysql 关联顺序_Mysql 多表关联链接顺序说明相关推荐

  1. mysql俩个表之间关联语法_MySQL多表关联SQL语句调优

    本文不涉及复杂的底层数据结构,是通过explain解释SQL,并根据当前可能出现的情况,来做具体的优化,使百万级.千万级数据表关联查询第一页结果能在几秒内完成(真实业务告警系统优化结果).希望对您有一 ...

  2. mysql 关联删除_mysql如何删除关联表

    mysql数据库中,表与表之间进行关联之后,就不可随意的进行删除操作,否则会影响所有关联表之间的结构,那么如何安全的删除关联表呢,让我们来了解一下. mysql使用drop命令删除关联表,方法为: 1 ...

  3. mysql 删除语句多表关联_MySQL多表关联数据同时删除sql语句

    MySQL多表关联数据同时删除sql语句 有需要的朋友可参考. DELETE删除多表数据,怎样才能同时删除多个关联表的数据呢?这里做了深入的解释: 代码如下 1 delete from t1 wher ...

  4. MySQL数据库基础(多表关联查询、内外全连接、复合条件查询、子查询)

    文章目录 一.笛卡尔积查询 二.内.外.全连接查询 三.复合条件查询 四.子查询 五.EXIST判断 本篇文章主要介绍MySQL里的多表关联查询,其中包括了笛卡尔积查询.内连接查询.外连接查询.全连接 ...

  5. MySQL高级之外键、表关联、数据导入及导出

    文章目录 MySQL高级 外键(foreign key) 嵌套查询(子查询) 多表查询 连接查询 数据导入 数据导出 表的复制 锁(自动加锁和释放锁) MySQL高级-重点掌握 外键 嵌套查询(子查询 ...

  6. MYSQL外键约束和表关联

    1. 外键约束 约束 : 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.关联性 foreign key 功能 : 建立表与表之间的某种约束的关系,由于这种关系的存在,能够让 ...

  7. php三表关联查询,SQL两表关联查询(两表会了,三表,四表都小意思)

    这几天在php群里吹牛逼,看到一个sql表关联查询问题,以前就想写,一直没总觉,实话说,我去年这个时候一表查询都不会,说来惭愧,闲话不多说,正题开始: 首先是news表 下面是newscate表 // ...

  8. mysql 语句解析_MySQL进阶之语句解析顺序

    概述 一条普通的SQL查询语句它在MySQL数据库中是怎么样被解析和执行的呢?下面一起来了解一下,MySQL是如何解析SQL查询语句的,这对理解MySQL的执行计划也大有益处. 解析顺序 下面是一条普 ...

  9. mysql 回退查询_MYSQL数据库表排序规则不一致导致联表查询,索引不起作用问题...

    Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...

最新文章

  1. CTFshow 反序列化 web277
  2. ViewPager实现翻页效果导航点
  3. boost::gil模块实现dynamic image的测试程序
  4. Rust 编程语言极简教程 --- 实例学习
  5. 若只让我推荐一名LiveVideoStackCon上海的讲师,就是他
  6. 小老板,我学的计算机组成原理告诉我半导体存储器都是断电后丢失的,为什么U盘SSD(固态硬盘)没事呢?
  7. mfc 弹簧_弹簧活性样品
  8. Intellij IDEA--修改JDK版本
  9. 股票交易接口JavaScript开发
  10. 【Web技术】1139- 手把手教你实现手绘风格图形
  11. python中的大数据品牌运营专业公司_大数据专业有哪些就业岗位?
  12. 【华为云技术分享】深度理解AI概念、算法及如何进行AI项目开发
  13. 结构体复数相乘c语言,复数乘法中的结构体赋值实现代码
  14. 卸载 make install 编译安装的软件
  15. 用Python画圣诞树
  16. LiveGBS-摄像机网页低延时无插件直播实现
  17. IntelliJ IDEA下Git的配置与使用(命令行下)
  18. RedisCluster如何高效率地批量插入数据
  19. SecureCRT 入门使用
  20. 机器学习、数据分析类面经分享(美的_秋招_校招_20170924)

热门文章

  1. krpano1.20版本正式发布!
  2. 树莓派 使用3.5耳机口输出音频
  3. 富途证券后端PHP面经
  4. 如何使用deeptools处理BAM数据
  5. Process Hacker 简单介绍
  6. 判断web网站是否站库分离
  7. 基于CNN的垃圾分类模型
  8. php array_diff_assoc,关于array_diff_assoc的详细介绍
  9. 哆啦A梦主题乐园,一定要去!
  10. 侵害个人信息被工信部点名仍未整改,桔子分期产品被下架,盛银消金和金美信消金为合作方