階層問合せか、再帰問合せか、それが問題だ #3 おまけ Tweet
階層問合せと再帰問合せを比較するため条件を合わせるという意味でWITH句を利用したが、階層問合せは、再帰問合せと異なりWITH句は必要ないのも有利ですね。
実行計画こそWITH句を利用した場合と変わりまりませんが、階層問合せではWITH句は必須ではないので、WITH句を利用しない階層問合せとWITH句が必須な再帰問合せでは、今のところ、階層問合せの方がPGAの利用サイズが決定的に少ないものは間違いないですね :)
WITH句伴わない階層問合せでPGAサイズを見てみると…
SCOTT> r
1 select
2 empno,
3 ename,
4 job,
5 mgr,
6 level
7 from
8 emp
9 start with
10 mgr is null
11 connect by
12* prior empno = mgr
EMPNO ENAME JOB MGR LEVEL
---------- ---------- --------- ---------- ----------
7839 KING PRESIDENT 1
7566 JONES MANAGER 7839 2
7788 SCOTT ANALYST 7566 3
7876 ADAMS CLERK 7788 4
7902 FORD ANALYST 7566 3
7369 SMITH CLERK 7902 4
7698 BLAKE MANAGER 7839 2
7499 ALLEN SALESMAN 7698 3
7521 WARD SALESMAN 7698 3
7654 MARTIN SALESMAN 7698 3
7844 TURNER SALESMAN 7698 3
7900 JAMES CLERK 7698 3
7782 CLARK MANAGER 7839 2
7934 MILLER CLERK 7782 3
14行が選択されました。
再帰問合せとの差がはっきりでましたね〜 Oracle11g R2では階層問合せでいいかな。再帰問合せはどーゆー場合に有利なんだろ。悩む。
SYS> /
SID NAME VALUE
---------- ------------------------------ ----------
66 session pga memory 672296
66 session pga memory max 672296
66 session uga memory 246552
66 session uga memory max 246552
SYS> /
SID NAME VALUE
---------- ------------------------------ ----------
66 session pga memory 999976
66 session pga memory max 999976
66 session uga memory 377528
66 session uga memory max 377528
SYS>
・階層問合せか、再帰問合せか、それが問題だ
・階層問合せか、再帰問合せか、それが問題だ #2
| 固定リンク
コメント