测试分类合并连接
<代码>当优化器考虑排序合并连接 一个散列连接需要这个表的一个哈希表和一个探测器,而排序合并连接需要两类。 优化器可能会选择一个排序合并连接在一个哈希连接加入大量数据时的满足以下条件: 两个表之间的联接条件不是一个同等连接,也就是说,使用一个不等式条件如& lt; & lt;=祝辞,或在=? 与合并,散列连接需要一个平等的条件。 因为所需的各种各样的其他操作,优化器找到更便宜的使用分类合并。 如果存在一个索引,那么数据库可以避免排序第一数据集。然而,数据库总是第二个数据集,不管索引。代码>
<代码>完成;创建表t1(身份证号码); 创建表。 完成;创建表t2(身份证号码); 创建表。 完成;(2)插入t1值; 1行。 完成;(1)插入t1值; 1行。 完成;(5)插入t1值; 1行。 完成;(3)插入t1值; 1行。 完成;提交; 完成;select * from t1; ID ---------- 2 1 5 3. 完成;插入t2值(11); 1行。 完成;插入t2值(9); 1行。 完成;(1)插入t2值; 1行。 完成;提交; 完成;选择从t2 *; ID ---------- 11 9 1 完成; 完成;exec dbms_stats.gather_table_stats (“SYS”、“T1”); PL/SQL过程成功完成。 完成;exec dbms_stats.gather_table_stats (“SYS”、“T2”); PL/SQL过程成功完成。 完成;使autot 完成;上创建索引ind_id t1 (Id); 创建索引。 完成;设置autot traceon 完成;select * from t1, t2 t1.id> t2.id; 执行计划 ---------------------------------------------------------- 计划散列值:1335671014 ------------------------------------------------------------------------------ | | |操作Id名称| | |行字节成本(% CPU) | | ------------------------------------------------------------------------------ SELECT语句| 0 | | | 2 | 12 | 4 (25)| 00:00:01 | | 1 |合并连接| | 2 | 12 | 4 (25)| 00:00:01 | | 2 |加入排序| | 4 | 12 | 1 (0)| 00:00:01 | | 3 |指数全扫描| IND_ID | 4 | 12 | 1 (0) | 00:00:01 | | * 4 |加入排序| | 3 | 9 | 3 (34)| 00:00:01 | | 5 |表访问全部| T2 | 3 | 9 (0) | 2 | 00:00:01 | ------------------------------------------------------------------------------ 谓词信息(由操作id): --------------------------------------------------- 4 -访问(INTERNAL_FUNCTION (T1。“ID”)在INTERNAL_FUNCTION (“T2”。“ID”)) 过滤器(INTERNAL_FUNCTION (T1。“ID”)在INTERNAL_FUNCTION (“T2”。“ID”)) 统计数据 ---------------------------------------------------------- 1递归调用 0数据库块收到 3一致就 0物理读 0重做的尺寸 通过SQL *网客户端发送652字节 通过SQL * 519字节收到从客户端 2 SQL *净循环/从客户端 2类(内存) 0类(磁盘) 3行处理代码>