8.2.1.9 LEFT JOIN and RIGHT JOIN Optimization 左关联和又关联
2015-10-20 16:45
253 查看
8.2.1.9 LEFT JOIN and RIGHT JOIN Optimization 左关联和又关联
MySQL 实现一个A LEFT JOIN B 关联如下:
1.table B 是设置为依赖表A 和A依赖的所有表
表A 是设置为所有的表(除了B) 用于LEFT JOIN 条件:
LEFT JOIN 条件是用于确定如何从B表检索记录(换句话说,WHERE 子句中的任何条件不被使用)
所有的标准连接优化被执行, 一个表总是在它依靠的所有表后读取,
如果这里有一个特别的依靠, MySQL 执行一个错误:
所有的标准WHERE 优化被执行:
如果有一个记录 在A 匹配WHERE 子句, 但是没有记录在B通过关联条件匹配,一个额外的B记录会生成 B表关联不上的列设置为
NULL
如果你使用LEFT JOIN 来找到不存在某些表的记录有下面的测试:
col_name IS NULL 在where 部分, col_name 是一个列声明为NOT NULL,
MySQL 停止寻找更多的记录(对于一个特定的组合索引)
右连接实现是类似于左连接 颠倒的角色:
join 优化器计算关联表的顺序, 表读取的顺序强制通过LEFT JOIN或者 STRAIGHT_JOIN 帮助
关联优化的更快,因为有较小的表的列需要检查, 注意,这意味着,如果你做一个下面类型的查询,
Mysql 做一个全表扫描B因为全关联 强制它在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;
MySQL 实现一个A LEFT JOIN B 关联如下:
1.table B 是设置为依赖表A 和A依赖的所有表
表A 是设置为所有的表(除了B) 用于LEFT JOIN 条件:
LEFT JOIN 条件是用于确定如何从B表检索记录(换句话说,WHERE 子句中的任何条件不被使用)
所有的标准连接优化被执行, 一个表总是在它依靠的所有表后读取,
如果这里有一个特别的依靠, MySQL 执行一个错误:
所有的标准WHERE 优化被执行:
如果有一个记录 在A 匹配WHERE 子句, 但是没有记录在B通过关联条件匹配,一个额外的B记录会生成 B表关联不上的列设置为
NULL
如果你使用LEFT JOIN 来找到不存在某些表的记录有下面的测试:
col_name IS NULL 在where 部分, col_name 是一个列声明为NOT NULL,
MySQL 停止寻找更多的记录(对于一个特定的组合索引)
右连接实现是类似于左连接 颠倒的角色:
join 优化器计算关联表的顺序, 表读取的顺序强制通过LEFT JOIN或者 STRAIGHT_JOIN 帮助
关联优化的更快,因为有较小的表的列需要检查, 注意,这意味着,如果你做一个下面类型的查询,
Mysql 做一个全表扫描B因为全关联 强制它在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;
相关文章推荐
- linux中nodejs后台运行工具forever
- 关于MVC EF架构及Repository模式的一点心得
- nginx install
- Open-iSCSI
- Linux命令小记
- Win7上IIS发布网站系统\部署项目
- 清理ambari安装的hadoop集群
- 关于Apache与Nginx的优势比较
- iOS架构模式--MVC理解
- mysql5.5在linux下的集群,同步和配置优化
- linux学习,基本指令大全2
- opencv使用遇到问题记录
- PopUpWindow使用详解(二)——进阶及答疑
- Linux修改本机/etc/hosts的hostName后经常不生效
- CentOS 6.5 安装R语言3.2.2
- eclipse配置tomcat 8.0.24服务器
- Linux 性能分析相关概念(来自IBM红皮书)
- hadoop32位编译为64位以及安装运行注意事项--centos7
- 使用<s:property>和<s:fielderror>获取信息
- opencv中Mat的使用与存取