学习oracle技术,每天学一点,每天进步一点
oracle in与exists 的区别
上一篇 /
下一篇 2008-04-14 14:52:28
/ 个人分类:pl/sql
表的分布情况 采用cbo 数据和索引都已分析
tb_role 为8960行 建有parent_id的索引ITPUB个人空间3]4ws`X x.p
tb_user 为8541行 建有role_id的索引ITPUB个人空间;U/i7|.pjdzO
SQL> select id, role_id, login
3L;]%p[w4B0 2 from tb_user eITPUB个人空间^7n*eiV
`
3 where Exists (Select ID
1`-L^@\#Y2m0 4 From tb_role fITPUB个人空间g_L0A(v
f S;v
5 where e.role_id = f.idITPUB个人空间w zc?Z#@P
6 Connect By Prior Id = parent_idITPUB个人空间?%[(?xzd
7 Start With Id = 1);
;WhMu ^%[Hl
y0
k%La*C1or08369 rows selected.
c}\Ew^`.yepPjU0
L'?G
k8u$wQ.JI!D0ITPUB个人空间4{Y0S3u ov
Execution PlanITPUB个人空间6T'?2D3?!I"|%A
----------------------------------------------------------
x vr jc
`Z^0 0 SELECT STATEMENT ptimizer=CHOOSE (Cost=1292 Card=428 Bytes=ITPUB个人空间T$o,[H,D{/?Mj
9416)
/r'feFxw0
hpAUZL
SK0 1 0 FILTERITPUB个人空间o*vla*|aqh
2 1 TABLE ACCESS (FULL) OF 'tb_user' (Cost=8 Card=428 Byte
0_
x-Ih/PLV.K0 s=9416)
0D9dG
Ap0ITPUB个人空间 w1iG*X:j
uU w5^%v0{7UI
3 1 FILTER
,~#d0_Y/`:t [0 4 3 CONNECT BY (WITH FILTERING)
|!c b9HW)x"P9`0 5 4 NESTED LOOPSITPUB个人空间 v5\'I]fmj5|}
6 5 INDEX (UNIQUE SCAN) OF 'PK_tb_role' (UNIQUE)ITPUB个人空间%Q;MV&k
r)G3xl&q
(Cost=1 Card=1 Bytes=5)ITPUB个人空间W)I9|d r(W
J'@
`W sI(X%n0 7 5 TABLE ACCESS (BY USER ROWID) OF 'tb_role'ITPUB个人空间d5m%@*M,\0Rh
d
8 4 NESTED LOOPS
Yw
[*GF,O5_4x0 9 8 BUFFER (SORT)ITPUB个人空间
k&Y2[~Y9eP
Z2hg
10 9 CONNECT BY PUMPITPUB个人空间1pI{.q$`+~
11 8 TABLE ACCESS (BY INDEX ROWID) OF 'tb_role' (ITPUB个人空间7q`-h8ck
Cost=3 Card=18 Bytes=162)
}({H[9`tD0
kX?3gd3\&[vO9v0 12 11 INDEX (RANGE SCAN) OF 'INX_tb_role_PARENT_ITPUB个人空间4D?Q@s%j
ID' (NON-UNIQUE) (Cost=1 Card=18)ITPUB个人空间#S%~7?s*Tr0C