mysql以下列方式实现一个A left join B 连接条件:

1,表B设置为依赖于表A和A所依赖的所有表

2,表A设置为依赖使用left join条件的所有表(除了B)

3,left join条件被用于决定如何从表B中取数据行(换句话说,不使用WHERE子句的任何条件)

4,执行所有标准的连接优化,有一个例外:一个表总是在依赖的所有表之后,读取表数据(个人补充:就是说当你采用连接查询时,读取数据,总是在将所有依赖的表进行连接操作以后)。如果有循环依赖关系,则会发生错误。

5,执行所有标准的where 优化

6,如果在表A中有一行数据符合WHERE子句,但是在表B中并没有这么一行符合 on 条件。一个额外的行将被创建,并且填充数据为null

7,如果您使用LEFT JOIN来查找某些表中不存在的行,并且具有以下测试:在WHERE子句中col_name IS NULL,其中col_name声明为NOT NULL列,则MySQL在找到一行数据符合left join条件后,将停止搜索更多行。

RIGHT JOIN的实现与LEFT JOIN类似,表格角色相反。右连接被转换为等效的左连接。详情请看:8.2.1.9简化的外链接

连接优化器计算连接表的顺序。由LEFT JOIN或STRAIGHT_JOIN强制的表读取顺序有助于连接优化器更快地完成其工作,因为有更少的表排列检查。这意味着如果您执行以下类型的查询,MySQL将对b进行全面扫描,因为LEFT JOIN强制在d之前读取它:

SELECT *

FROM a JOIN b LEFT JOIN c ON (c.key=a.key)

LEFT JOIN d ON (d.key=a.key)

WHERE b.key=d.key;去改变这种情况,是颠倒 FROM 子句中a 和 b的顺序:

SELECT *

FROM b JOIN a LEFT JOIN c ON (c.key=a.key)

LEFT JOIN d ON (d.key=a.key)

WHERE b.key=d.key;对于LEFT JOIN,如果生成的NULL行的WHERE条件总是为false,则LEFT JOIN将更改为正常连接。例如,如果t2.column1为NULL,WHERE子句将在以下查询中为false:

SELECT * FROM t1 LEFT JOIN t2 ON (column1) WHERE t2.column2=5;

因此,转换一个查询为正常连接是安全的:

SELECT * FROM t1, t2 WHERE t2.column2=5 AND t1.column1=t2.column1;

现在优化器可以在表t1之前使用表t2,如果这样做会产生更好的查询计划。要提供关于表连接顺序的提示,请使用STRAIGHT_JOIN。但是,STRAIGHT_JOIN可能会阻止使用索引,因为它禁用半连接转换

mysql左连接查询 优化_【mysql 优化 5】左连接和右连接优化相关推荐

  1. mysql 连接查询分组_详解MySQL中的分组查询与连接查询语句

    分组查询 group bygroup by 属性名 [having 条件表达式][ with rollup] "属性名 "指按照该字段值进行分组:"having 条件表达 ...

  2. mysql 多表 查询慢_详解Mysql多表联合查询效率分析及优化

    1. 多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如: SELECT * FROM table1 CROSS JOI ...

  3. mysql连接方式左联_数据库中的左连接(left join)和右连接(right join)区别 | 改变自己...

    Left Join / Right Join /inner join相关 关于左连接和右连接总结性的一句话: 左连接where只影向右表,右连接where只影响左表. Left Join select ...

  4. mysql创表的工种_[MySQL基础]七、连接查询

    含义:又称为多表查询,当查询的字段来自多个表时,就会用到连接查询 笛卡尔乘积现象 表1 有m行,表2有n行,结果为m*n行 发生原因:没有有效的连接条件. 如何避免:添加有效的连接条件. 案例:在bo ...

  5. mysql一秒查询次数_单个select语句实现MySQL查询统计次数

    单个select语句实现MySQL查询统计次数 单个select语句实现MySQL查询统计次数的方法用处在哪里呢?用处太多了,比如一个成绩单,你要查询及格得人数与不及格的人数,怎么一次查询出来? My ...

  6. mysql 安时间查询格式_安装MySQL慢查询日志工具Anemometer

    首先安装LNMP环境,要求PHP-5.3以上版本.参考:http://isadba.com/?p=82 或者参考 http://isadba.com/?p=572 然后下载Anemometergit ...

  7. mysql数据库中查询姓氏_数据库查询表添加姓氏

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  8. 小白终是踏上了这条不归路----小文的mysql学习笔记(6)----连接查询-----等值连接、非等值连接、自链接、外连接、交叉连接

    ** 小白终是踏上了这条不归路----小文的mysql学习笔记(1) 小白终是踏上了这条不归路----小文的mysql学习笔记(2)----条件查询 小白终是踏上了这条不归路----小文的mysql学 ...

  9. mysql5张表连接查询_5、mysql的连接查询

    1.内联查询 >inner join 或 join 2.外联查询 (1)左连接 >left outer join 或 left join (2)右连接 >right outer jo ...

  10. mysql 5 7 教程视频_[MySQL] MySQL 5.7从入门到精通视频教程

    资源介绍 目录 ├─MySQL常用命令大全.pdf ├─视频教程 │xa0xa0├─第10讲 存储过程和函数 │xa0xa0│xa0xa0├─10.1xa0xa0创建存储过程和函数.avi │xa0x ...

最新文章

  1. Java,Hello world 欢迎进入Java世界
  2. 工作那些事儿(12)- 缓存
  3. 【Java 泛型】泛型用法 ( 泛型类用法 | 泛型方法用法 | 泛型通配符 ? | 泛型安全检查 )
  4. 60度斜坡怎么计算_【测绘】南方CASS土方计算方法—方格网法
  5. saas物资管理界面设计_大型物流企业都在用的SaaS系统,看大规模运配网络如何实现精细化管理?...
  6. python apply_async执行不了_python – Django Celery apply_async不起作用
  7. 操作系统 汤子瀛版 读书总结
  8. StringUtils测试
  9. c++派生类构造顺序
  10. java中对象的克隆
  11. Linux 开机引导和启动过程详解
  12. 架构师之路工作量化与细化
  13. 为什么建议大家一定要办一张大流量卡!
  14. python判断是否包含某数字_python如何判断数组里是否有某个数字
  15. Python如何写接口,以及请求多种外部接口的方法
  16. ASO排名优化、投放思路分析总结,aso投放策略
  17. 职校高一计算机课高一,职高高一数学课件
  18. php编写跑马灯,使用C++的编程风格写一个跑马灯的例程
  19. OA开发很简单 OA实施很复杂
  20. ORACLE UGA与CGA

热门文章

  1. 隐藏自己的真正身份进行入侵!
  2. python自然语言
  3. mysql deallocate,MySQL中prepare与execute以及deallocate预处理语句的使用教程
  4. 霍纳法则--计算多项式的值
  5. 好文转载:90后妹纸学习CPA广告推广 创业就是这么简单
  6. 在国内上市需要什么条件
  7. SpringBoot之三种常见的依赖注入方式
  8. Go语言upnp和socket编程
  9. 监控系统电子眼安装经验和预防措施
  10. Linux下cut工具的使用