mysql左连接查询 优化_【mysql 优化 5】左连接和右连接优化
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】左连接和右连接优化相关推荐
- mysql 连接查询分组_详解MySQL中的分组查询与连接查询语句
分组查询 group bygroup by 属性名 [having 条件表达式][ with rollup] "属性名 "指按照该字段值进行分组:"having 条件表达 ...
- mysql 多表 查询慢_详解Mysql多表联合查询效率分析及优化
1. 多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用',' 如: SELECT * FROM table1 CROSS JOI ...
- mysql连接方式左联_数据库中的左连接(left join)和右连接(right join)区别 | 改变自己...
Left Join / Right Join /inner join相关 关于左连接和右连接总结性的一句话: 左连接where只影向右表,右连接where只影响左表. Left Join select ...
- mysql创表的工种_[MySQL基础]七、连接查询
含义:又称为多表查询,当查询的字段来自多个表时,就会用到连接查询 笛卡尔乘积现象 表1 有m行,表2有n行,结果为m*n行 发生原因:没有有效的连接条件. 如何避免:添加有效的连接条件. 案例:在bo ...
- mysql一秒查询次数_单个select语句实现MySQL查询统计次数
单个select语句实现MySQL查询统计次数 单个select语句实现MySQL查询统计次数的方法用处在哪里呢?用处太多了,比如一个成绩单,你要查询及格得人数与不及格的人数,怎么一次查询出来? My ...
- mysql 安时间查询格式_安装MySQL慢查询日志工具Anemometer
首先安装LNMP环境,要求PHP-5.3以上版本.参考:http://isadba.com/?p=82 或者参考 http://isadba.com/?p=572 然后下载Anemometergit ...
- mysql数据库中查询姓氏_数据库查询表添加姓氏
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- 小白终是踏上了这条不归路----小文的mysql学习笔记(6)----连接查询-----等值连接、非等值连接、自链接、外连接、交叉连接
** 小白终是踏上了这条不归路----小文的mysql学习笔记(1) 小白终是踏上了这条不归路----小文的mysql学习笔记(2)----条件查询 小白终是踏上了这条不归路----小文的mysql学 ...
- mysql5张表连接查询_5、mysql的连接查询
1.内联查询 >inner join 或 join 2.外联查询 (1)左连接 >left outer join 或 left join (2)右连接 >right outer jo ...
- mysql 5 7 教程视频_[MySQL] MySQL 5.7从入门到精通视频教程
资源介绍 目录 ├─MySQL常用命令大全.pdf ├─视频教程 │xa0xa0├─第10讲 存储过程和函数 │xa0xa0│xa0xa0├─10.1xa0xa0创建存储过程和函数.avi │xa0x ...
最新文章
- Java,Hello world 欢迎进入Java世界
- 工作那些事儿(12)- 缓存
- 【Java 泛型】泛型用法 ( 泛型类用法 | 泛型方法用法 | 泛型通配符 ? | 泛型安全检查 )
- 60度斜坡怎么计算_【测绘】南方CASS土方计算方法—方格网法
- saas物资管理界面设计_大型物流企业都在用的SaaS系统,看大规模运配网络如何实现精细化管理?...
- python apply_async执行不了_python – Django Celery apply_async不起作用
- 操作系统 汤子瀛版 读书总结
- StringUtils测试
- c++派生类构造顺序
- java中对象的克隆
- Linux 开机引导和启动过程详解
- 架构师之路工作量化与细化
- 为什么建议大家一定要办一张大流量卡!
- python判断是否包含某数字_python如何判断数组里是否有某个数字
- Python如何写接口,以及请求多种外部接口的方法
- ASO排名优化、投放思路分析总结,aso投放策略
- 职校高一计算机课高一,职高高一数学课件
- php编写跑马灯,使用C++的编程风格写一个跑马灯的例程
- OA开发很简单 OA实施很复杂
- ORACLE UGA与CGA