最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Oracle中的mergejoinCartesian

来源:动视网 责编:小采 时间:2020-11-09 12:07:31
文档

Oracle中的mergejoinCartesian

Oracle中的mergejoinCartesian:在执行计划中,有时会出现CARTESIAN笛卡尔乘积,简单的说一下什么叫cartesian就是有两个集合,每个集合的任意一个成员都要与另外 在执行计划中,有时会出现CARTESIAN笛卡尔乘积,简单的说一下什么叫cartesian就是有两个集合,每个集合的任意一个成员都要与
推荐度:
导读Oracle中的mergejoinCartesian:在执行计划中,有时会出现CARTESIAN笛卡尔乘积,简单的说一下什么叫cartesian就是有两个集合,每个集合的任意一个成员都要与另外 在执行计划中,有时会出现CARTESIAN笛卡尔乘积,简单的说一下什么叫cartesian就是有两个集合,每个集合的任意一个成员都要与


在执行计划中,有时会出现CARTESIAN笛卡尔乘积,简单的说一下什么叫cartesian?就是有两个集合,每个集合的任意一个成员都要与另外

在执行计划中,有时会出现CARTESIAN笛卡尔乘积,简单的说一下什么叫cartesian?就是有两个集合,每个集合的任意一个成员都要与另外一个集合的任意一个成员有关联...下面是关于cartesian的一些实验:

SQL> set linesize 2000

SQL> select * from tab;

TNAME TABTYPE CLUSTERID

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

T TABLE

REP_T_LOG TABLE

SQL> select * from t,rep_t_log

Execution Plan

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

Plan hash value: 2235198130

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

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

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

| 0 | SELECT STATEMENT | | 20000 | 429K| 16 (7)| 00:00:01 |

| 1 | MERGE JOIN CARTESIAN| | 20000 | 429K| 16 (7)| 00:00:01 |

| 2 | TABLE ACCESS FULL | REP_T_LOG | 2 | 30 | 3 (0)| 00:00:01 |

| 3 | BUFFER SORT | | 10000 | 70000 | 13 (8)| 00:00:01 |

| 4 | TABLE ACCESS FULL | T | 10000 | 70000 | 6 (0)| 00:00:01 |

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

Note

-----

- dynamic sampling used for this statement

SQL>

如果强制不允许merge join Cartesian出现,可以通过设置隐含参数“_optimizer_mjc_enabled”

SQL> alter session set "_optimizer_mjc_enabled" = false;

Session altered.

SQL> select * from t,rep_t_log;

Execution Plan

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

Plan hash value: 4018263157

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

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

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

| 0 | SELECT STATEMENT | | 20000 | 429K| 16 (7)| 00:00:01 |

| 1 | NESTED LOOPS | | 20000 | 429K| 16 (7)| 00:00:01 |

| 2 | TABLE ACCESS FULL| REP_T_LOG | 2 | 30 | 3 (0)| 00:00:01 |

| 3 | TABLE ACCESS FULL| T | 10000 | 70000 | 6 (0)| 00:00:01 |

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

Note

-----

- dynamic sampling used for this statement

SQL> conn / as sysdba

Connected.

在整个系统级禁用笛卡尔乘积

SQL> alter system set "_optimizer_mjc_enabled" = false;

System altered.

SQL> conn test/test

Connected.

SQL> set autotrace trace exp

SQL> select * from t,rep_t_log;

Execution Plan

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

Plan hash value: 4018263157

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

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

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

| 0 | SELECT STATEMENT | | 20000 | 429K| 16 (7)| 00:00:01 |

| 1 | NESTED LOOPS | | 20000 | 429K| 16 (7)| 00:00:01 |

| 2 | TABLE ACCESS FULL| REP_T_LOG | 2 | 30 | 3 (0)| 00:00:01 |

| 3 | TABLE ACCESS FULL| T | 10000 | 70000 | 6 (0)| 00:00:01 |

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

Note

-----

- dynamic sampling used for this statement

当出现merge join Cartesian时,,sql的执行效率可能会很低,对于系统的隐藏参数,一般不应该改变。

文档

Oracle中的mergejoinCartesian

Oracle中的mergejoinCartesian:在执行计划中,有时会出现CARTESIAN笛卡尔乘积,简单的说一下什么叫cartesian就是有两个集合,每个集合的任意一个成员都要与另外 在执行计划中,有时会出现CARTESIAN笛卡尔乘积,简单的说一下什么叫cartesian就是有两个集合,每个集合的任意一个成员都要与
推荐度:
标签: 中的 oracle join
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top