oracle表连接(二)
来源:互联网 发布:逛淘宝流量消耗异常 编辑:程序博客网 时间:2024/06/06 09:11
各类连接驱动顺序区别
1.嵌套循环连接
select /*+leading(t1) use_nl(t2)*/ * from t1, t2 where t1.id = t2.t1_id and t1.n = 19;
select /*+leading(t2) use_nl(t1)*/ * from t1, t2 where t1.id = t2.t1_id and t1.n = 19;
select * from table(dbms_xplan.display_cursor(null, null, 'allstats last'));
t1表先访问:BUFFER 1014,t2只访问1次
t2表先访问:BUFFER 701K,t1被访问100000次
所以,嵌套循环连接要特别注意驱动表的顺序,小的结果集先访问,大的结果集后访问
2. 哈希连接
select /*+leading(t1) use_hash(t2)*/ * from t1, t2 where t1.id = t2.t1_id and t1.n = 19;
select /*+leading(t2) use_hash(t1)*/ * from t1, t2 where t1.id = t2.t1_id and t1.n = 19;
select * from table(dbms_xplan.display_cursor(null, null, 'allstats last'));
t1表先访问:BUFFER 1013,Used_Mem 286K,时间0.04秒
t2表先访问:BUFFER 1013,Used_Mem 11MB,时间0.01秒
在哈希连接中,驱动表顺序也很重要
3.排序合并连接
select /*+leading(t1) use_merge(t2)*/ * from t1, t2 where t1.id = t2.t1_id and t1.n = 19;
select /*+leading(t2) use_merge(t1)*/ * from t1, t2 where t1.id = t2.t1_id and t1.n = 19;
select * from table(dbms_xplan.display_cursor(null, null, 'allstats last'));
无论先访问t1还是先访问t2,效率都一样,执行时间,BUFFER,USED_MEM都一样,这表明,排序合并连接没有驱动表概念。
综上所述:嵌套循环连接和哈希连接有驱动顺序,驱动表的顺序不同将影响表连接的性能;而排序合并连接没有驱动的概念,无论哪张表在前都无妨。
嵌套循环连接不需要排序;哈希连接并不排序,消耗内存是用于建议HASH表;排序合并连接需要排序。关于哈希连接和排序合并连接,不要取多余的字段参与排序,因为选择的字段越少,消耗内存的尺寸就越小。
select /*+leading(t2) use_merge(t1)*/ * from t1, t2 where t1.id = t2.t1_id and t1.n = 19;
select /*+leading(t2) use_merge(t1)*/ t1.id from t1, t2 where t1.id = t2.t1_id and t1.n = 19;
select * from table(dbms_xplan.display_cursor(null, null, 'allstats last'));
可以看出Used_Mem代表的内存消耗差别很大
- oracle表连接(二)
- 《收获,不止Oracle》读书笔记(二):表连接
- eclipse+hibernate 连接Oracle (二)
- oracle 网络连接类型(二)
- Oracle 基本操作二:内连接,左连接,右连接,自连接,集合查询(union)
- undo表空间故障特殊恢复(二)------ORA-01092: ORACLE 实例终止。强制断开连接
- JDBC学习笔记(二):连接Oracle数据库(DriverManager)
- 不好好说话版原理(二)ORACLE数据库的连接
- 如何实现Java与oracle数据库的连接(二)
- Oracle学习笔记(二)——嵌套循环连接
- oracle——监听(二、sqlplus连接数据库)
- Oracle(二)函数,与各种连接查询
- 表的连接(二)
- oracle表连接(一)
- oracle表连接(三)
- oracle表连接(四)
- 【Oracle】多表连接查询——内连接、左连接、右连接、全连接(外连接)、完全连接
- Oracle基础知识(二十三) - 在Oracle的连接视图上进行数据更新操作
- uva 10012 How Big Is It?(枚举)
- iOS性能优化系列
- hdu 1251 统计难题 字典树水题
- hibernate.hbm2ddl.auto配置详解
- Swift学习---日期计算小练习
- oracle表连接(二)
- oracle11g 远程登录数据库
- Best Time to Buy and Sell Stock II
- Android新建工程时出现的appcompat_v7问题
- Android iOS APPUI设计规范实例(详细的UI设计方法)
- UIMenuController不能正常显示或消失
- ViewAnimator使用
- PHP获取搜索引擎关键词
- OpenWRT 增加内核模块及应用方法