基于案例SQL优化第八课作业分享
―――――――――――――――――――――作业―――――――――――――――――――――――――――――――
布置人:wabjtam123
一、说说三大经典表连接分别有什么限制?
1、Nested Loops Join,支持大于,小于,不等,LIKE等连接条件,可以说没有受到任何限制;
2、Hash Join不支持>、<、like、<>等;
3、Merge Sort Join支持>、<,不支持like和<>;
二、说说三大经典表连接的各自特性(从表访问次数,表驱动顺序与性能、是否排序这三方面说)
1、Nested Loops Join:
- 表的访问次数,NL连接中,驱动表被访问0或者1次,被驱动表被访问0次或者N次,N由驱动表返回的结果集的条数来定。
- 表驱动顺序与性能,NL连接中,表驱动顺序与性能有非常大的关系,应该把返回结果集小的作为驱动表。
- 表连接是否有排序,通过排序观察统计信息的sorts(memory)和sorts(disk)部分得出,NL连接不会产生排序!
2、Hash Join:
- 表的访问次数,HASH连接中,驱动表被访问0或者1次,被驱动表也是被访问0次或者1次,绝大部分场景是驱动表和被驱动表被各访问1次);
- 表驱动顺序与性能,HASH连接中,表驱动顺序与性能有非常大的关系,应该把返回结果集小的作为驱动表,同NL连接。
- 表连接是否有排序,通过排序观察统计信息的sorts(memory)和sorts(disk)部分得出,HASH连接不会产生排序!
3、Merge Sort Join:
- 表的访问次数,排序合并连接中,两表都是只被访问0次或者1次,和HASH 连接一样;
- 表驱动顺序与性能,Merge连接中,表驱动顺序与性能有非常大的关系,应该把返回结果集小的作为驱动表,同NL连接;
- 表连接是否有排序,通过排序观察统计信息的sorts(memory)和sorts(disk)部分得出,Merge Sort Join会产生排序!
三、说说表连接优化有哪些要点
- Hash Join连接优化第1式,两表的限制条件有索引(注:针对索引条件返回记录很少的情况)!
- Hash Join连接优化的第2斧是,注意驱动表的结果集是否是小的 (在统计信息不准确的时候,经常会出现将大的结果集驱动的情况,需要我们介入判断分析)
- HASH连接优化第3斧(确保在PGA完成HASH运算的尺寸);
- Merge Sort Join连接优化第1式,两表的限制条件有索引(注:针对索引条件返回记录很少的情况)!
- Merge Sort Join连接优化第2式,在连接条件字段上建索引,用以消除排序合并连接的排序动作!
- Merge Sort Join连接优化第3式,避免多余列致排序尺寸过大;
- Merge Sort Join优化第4式,保证PGA的尺寸要大。
- Nested Loops Join连接优化的第1把菜刀是,驱动表的限制条件有索引!
- 给Nested Loops Join连接优化的第2把菜刀是,被驱动表的连接条件有索引!
- Nested Loops Join连接优化的第3把菜刀是,注意驱动表的结果集是否是小的, (在统计信息不准确的时候,经常会出现将大的结果集驱动的情况,需要我们介入判断分析);
- 注意:Hash连接和NL连接只取部分列性能基本不会有什么提升
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。