Oracle查询重写对全外连接为何无效

试发现,Oracle不支持全外连接的查询重写,即使物化视图和查询语句完全匹配。

在10g中测试发现对于全外连接,创建语句一致的物化视图也无法利用查询重新功能:

[oracle@yans1 ~]$ sqlplus test/test

SQL*Plus: Release10.2.0.3.0 - Production on星期一10月18 12:16:47 2010

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

Connected to:

Oracle Database10gEnterprise Edition Release10.2.0.3.0 - 64bit Production

With the Partitioning, OLAP and Data Mining options

SQL> SET PAGES 100 LINES 120

SQL> SHOW PARAMETER QUERY

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

query_rewrite_enabled                string      TRUE

query_rewrite_integrity              string      enforced

SQL> CREATE MATERIALIZED VIEW MV_T1_FULL_JOIN_T2  

2  ENABLE QUERY REWRITE AS

3  SELECT T1.ID ID1, T2.ID ID2

4  FROM T1 FULL OUTER JOIN T2

5  ON T1.ID = T2.ID;

Materialized view created.

SQL> SET AUTOT ON

SQL> SELECT T1.ID ID1, T2.ID ID2

2  FROM T1 FULL OUTER JOIN T2

3  ON T1.ID = T2.ID;

ID1        ID2

---------- ----------

2          2

3          3

4          4

5          5

6          6

7          7

8          8

1

0

10

9

11 rows selected.

Execution Plan

----------------------------------------------------------

Plan hash value: 2841162349

-----------------------------------------------------------------------------

| Id  | Operation            | Name | Rows  | Bytes | Cost (%CPU)| Time     |

-----------------------------------------------------------------------------

|   0 | SELECT STATEMENT     |      |    10 |   260 |    13   (8)| 00:00:01 |

本栏目更多精彩内容:http://www.bianceng.cn/database/Oracle/

|   1 |  VIEW                |      |    10 |   260 |    13   (8)| 00:00:01 |

|   2 |   UNION-ALL          |      |       |       |            |          |

|*  3 |    HASH JOIN OUTER   |      |     9 |   234 |     7  (15)| 00:00:01 |

|   4 |     TABLE ACCESS FULL| T1   |     9 |   117 |     3   (0)| 00:00:01 |

|   5 |     TABLE ACCESS FULL| T2   |     9 |   117 |     3   (0)| 00:00:01 |

|*  6 |    HASH JOIN ANTI    |      |     1 |    26 |     7  (15)| 00:00:01 |

|   7 |     TABLE ACCESS FULL| T2   |     9 |   117 |     3   (0)| 00:00:01 |

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索sql
, oracle
, 查询
, 00
, id
, hibernate全外连接
, full
重写View
oracle 无效数字、oracle无效的列索引、oracle 标识符无效、oracle 无效字符、oracle 无效的列类型,以便于您获取更多的相关知识。

时间: 2024-09-18 14:00:04

Oracle查询重写对全外连接为何无效的相关文章

Oracle 11g r2全外连接优化执行计划(三)NATIVE_FULL_OUTER_JOIN提示

虽然上一篇介绍了NATIVE_FULL_OUTER_JOIN和NO_NATIVE_FULL_OUTER_JOIN两个HINT,但是实际上NATIVE_FULL_OUTER_JOIN并没有发挥任何的作用,因为Oracle对全外连接的优化使得新的执行计划的代价比原始执行计划要低,所以Oracle默认就选择这个执行计划,因此看不到NATIVE_FULL_OUTER_JOIN提示的效果. SQL> SET AUTOT ON SQL> SELECT T1.ID, T2.ID 2  FROM T1 FUL

Oracle 11g r2全外连接优化执行计划(二) 新增的两个相关的HINT

Oracle在推出了新的执行计划的同时,还提供了两个控制这个执行计划的提示NATIVE_FULL_OUTER_JOIN和NO_NATIVE_FULL_OUTER_JOIN. 这两个HINT的使用十分简单,不需要其他的任何参数.下面继续上一篇文章的例子: SQL> SELECT /*+ NO_NATIVE_FULL_OUTER_JOIN */ T1.ID, T2.ID 2  FROM T1 FULL OUTER JOIN T2 3  ON T1.ID = T2.ID; ID        ID -

Oracle 11g r2全外连接优化执行计划(一)

在11.2中,Oracle对于全外连接的执行计划进行了优化. 在以前的版本中,全外连接的执行计划如下: SQL> SELECT * FROM V$VERSION; BANNER ---------------------------------------------------------------- Oracle Database10gEnterpriseEdition Release10.2.0.3.0 - 64bi PL/SQL Release 10.2.0.3.0 - Product

11gr2全外连接优化执行计划

在11.2中,Oracle对于全外连接的执行计划进行了优化.     在以前的版本中,全外连接的执行计划如下: SQL> SELECT * FROM V$VERSION; BANNER----------------------------------------------------------------Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64biPL/SQL Release 10.2.0.3.0 - Pr

11gr2全外连接优化执行计划(二)

在11.2中,Oracle对于全外连接的执行计划进行了优化. 这篇介绍新增的两个相关的HINT. 11gr2全外连接优化执行计划:http://yangtingkun.itpub.net/post/468/506826     Oracle在推出了新的执行计划的同时,还提供了两个控制这个执行计划的提示NATIVE_FULL_OUTER_JOIN和NO_NATIVE_FULL_OUTER_JOIN. 这两个HINT的使用十分简单,不需要其他的任何参数.下面继续上一篇文章的例子: SQL> SELE

11gr2全外连接优化执行计划(三)

在11.2中,Oracle对于全外连接的执行计划进行了优化. 这篇进一步介绍NATIVE_FULL_OUTER_JOIN提示. 11gr2全外连接优化执行计划:http://yangtingkun.itpub.net/post/468/506826 11gr2全外连接优化执行计划(二):http://yangtingkun.itpub.net/post/468/506876     虽然上一篇介绍了NATIVE_FULL_OUTER_JOIN和NO_NATIVE_FULL_OUTER_JOIN两

hibernate全外连接-hibernate中在一对多关系中全外连接语句怎么写,求大神

问题描述 hibernate中在一对多关系中全外连接语句怎么写,求大神 Employee 类与 Department类是多对一关系,分别对应于表s_emp 和 s_dept表 其中s_emp表中外键 dept_id, Employee中有dept成员,Department中有Set集合 hibernate.hbm.xml都配置好了,不知道怎么写 全外连接语句 String hql="select E.id,D.id from Employee E full join Department D&q

Oracle数据库入门之多表连接与子查询

Oracle表连接 概述:SQL/Oracle使用表连接从多个表中查询数据 格式:select 字段列表 from table1,table2 where table1.column1=table2.column2; 说明:当被连接的多个表中存在同名字段时,必须在该字段前加上"table."作为前缀 如果没有限定where连接条件,否则就会出现笛卡尔集的不现实或没有实用意义的结果 举例:select empno, ename, sal, emp.deptno, dname, loc f

深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接

1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和courses表中学生标识号相同的所有行.       2.外联接.外联接可以是左向外联接.右向外联接或完整外部联接.     在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:     1)LEFT  JOIN或LEFT OUTER JOIN     左向外联接的结果集包括  LEF