[Oracle] 表的连接
2014-04-24 10:55
232 查看
在OLTP系统里,嵌套连接占了70%左右,哈希连接占了20%,合并排序连接占了10%。
根据上面的算法,我们可以知道,想要让嵌套连接性能好,必须同时满足以下3个条件:
1)驱动表返回的行数要足够少(减少被驱动表访问的次数);
2)驱动表的限制条件要有索引(提高访问驱动表的性能);
3)被驱动表的连接条件要有索引(提高访问被驱动表的性能)。
前面说过,在OLTP系统中,嵌套连接占了70%,因为OLTP系统返回的数据比较少,很适合嵌套连接的情形;还有一个原因就是,嵌套连接几乎没有限制,所有的操作都可以用嵌套连接,不像哈希连接和合并排序连接有很多的限制。
根据上面的算法我们可以知道,哈希连接只支持等值连接,它的限制最多。
想让哈希连接性能好,必须保证驱动表足够小,使得内存PGA可以放下哈希表。
合并排序连接的限制条件很多,支持><,但不支持like和<>
这种连接方式最大的性能开销是2次排序,因此在OLTP系统中很少被用到。
嵌套连接
算法:嵌套连接从两个表分选出小表为驱动表,大表为被驱动表,先访问驱动表(只访问1次),然后根据驱动表返回的行数多次访问被驱动表(被驱动表访问的次数等于驱动表返回的行数)。根据上面的算法,我们可以知道,想要让嵌套连接性能好,必须同时满足以下3个条件:
1)驱动表返回的行数要足够少(减少被驱动表访问的次数);
2)驱动表的限制条件要有索引(提高访问驱动表的性能);
3)被驱动表的连接条件要有索引(提高访问被驱动表的性能)。
前面说过,在OLTP系统中,嵌套连接占了70%,因为OLTP系统返回的数据比较少,很适合嵌套连接的情形;还有一个原因就是,嵌套连接几乎没有限制,所有的操作都可以用嵌套连接,不像哈希连接和合并排序连接有很多的限制。
哈希连接
算法:哈希连接是从两个表中选出一个小表作为驱动表,大表为被驱动表,根据驱动表构建哈希表,然后被驱动表的每一行在哈希表中进行哈希匹配。驱动表和被驱动表各访问一次。根据上面的算法我们可以知道,哈希连接只支持等值连接,它的限制最多。
想让哈希连接性能好,必须保证驱动表足够小,使得内存PGA可以放下哈希表。
合并排序连接
算法:合并排序连接是先分别对两个表进行排序,然后再根据排序结果进行比较合并。合并排序连接没有驱动表和被驱动表的概念。合并排序连接的限制条件很多,支持><,但不支持like和<>
这种连接方式最大的性能开销是2次排序,因此在OLTP系统中很少被用到。
相关文章推荐
- SHOUG线上活动 Maclean Liu分享《学习甲骨文数据库的自由之翼-与Oracle的世界相连接》
- oracle表连接--->排序合并连接
- oracle 数据库连接显示????
- 关于oracle9.2i以前版本的全连接
- oracle中 正在连接...ORA-12541: TNS: 没有监听程序
- Oracle – SQL表的连接
- cannot load oci dll,193-navicate连接oracle的解决方法
- 重装电脑系统后,客户端,plsql连接不上oracle问题
- Python 连接 Oracle
- Oracle中的连接小总结
- ORA-01940: 无法删除当前已连接的用户(Oracle,转)
- ORACLE几种表连接方式的区别
- 在linux下配置oracle远程连接数据库
- Oracle 11g RAC 本地时间和通过listener连接时间不相同的问题
- Oracle多行记录合并/连接/聚合字符串的几种方法 [转]
- PowerDesigner建立与数据库的连接,以便生成数据库和从数据库生成到PD中。[Oracle 10G版]
- JMeter学习(八)JDBC测试计划-连接Oracle
- Windows PHP/phpStudy 连接 甲骨文Oracle 数据库 oci8
- SQL连接,Oracle关联加号(+)等相关知识
- 【Eclipse】连接oracle rac及单个oracle 库,调用jdbc oracle thin.