Tina London's Guidelines and good
practice Guide for developing SQL
GUIDELINES AND GOOD PRACTICE GUIDE
FOR DEVELOPING SQL
Author : Tina London
Email : tlondon@i!"om#ulin$"o"u$
Dat% : Au&u't () *++,
*"- Introdution
,"- SQL La.out
,"* G%n%ral la.out
,", SQL /%.0ord'
,"1 Con'tant' and 2aria3l%'"
,"4 Out%r 5oin'
,"6 Ta3l% alia'%'"
,"7 Ord%rin& o8 0h%r% lau'%'"
1"- Data3a'% '%l%t'"
1"* Ord%rin& o8 th% 8rom lau'%"
1", Unint%ntionall. di'a3lin& ind%!%'"
1"1 Int%ntionall. di'a3lin& ind%!%'"
1"4 In2%'ti&at% R%0ritin& th% Qu%r.
1"6 U'% o8 th% E!i't' o#%rator
1"7 Don9t #%r8orm unn%%''ar. :oin'"
1"( R%'our% int%n'i2% o#%ration'
1"; U'% r%ali'ti t%'t data"
1"+ U'% o8 <= o#%rator
1"*- U'% Oral%9' tra% 8ailit."
1"** >ana&%m%nt o8 oral% ur'or'"
1"*, Th% *-)*6),- #%r%nt rul%
4"- In'%rt 'tat%m%nt'"
6"- Data3a'% u#dat%'"
7"- O#timi'in& oral% ?u%ri%'"
7"* Ta3l% a%''"
7", Ind%!%' and Null"
7"1 Ind%!%' and 9NOT=9 #r%diat%'"
7"4 Grou# 3. and #r%diat% lau'%'"
7"6 >ulti#l% ind%! ?u%ri%'"
7"7 @h%n ind%!%' annot 3% m%r&%d
7"( Su##r%''ion o8 ind%!%' 8or #%r8orman%
7"; Conat%nat%d ind%!%'
7"+ Or o#timi'ation
7"*- Non orr%lat%d 'u3 ?u%ri%'
7"** Corr%lat%d 'u3 ?u%ri%'
A##%ndi! A Qu%r. Path' Ran$%d in Ord%r o8 S#%%d
A##%ndi! A Ta3l%' u'%d in th% %!am#l%'"
A##%ndi! C Corr%lat%d u#dat%' and PLBSQL"
A##%ndi! D Guid%lin%' 8or out%r :oin '.nta!
A##%ndi! E Th% t%n ommandm%nt' 8or 8a't ?u%ri%'"
A##%ndi! F Oral% tra% 8ailit."
*"- Introduction
Th% #ur#o'% o8 thi' &uid% i' to #r%'%nt 'tandard'
and &uid%lin% 8or th% 0m' d%2%lo#m%nt t%am) 0hih 0ill
%n'ur% that ?ualit. SQL i' #rodu%d" Th% rul%' on SQL
la.out ar% im#ortant) 3%au'%) th%. im#ro2% th% larit.
o8 th% 'tat%m%nt'"
D%2%lo#%r' 'hould r%ali'% that) a' in third
&%n%ration #ro&rammin&) th% 8ir't m%thod o8 0ritin& a
#ro&ram i' not n%%''aril. th% 3%'t) th% 'am% i' tru%
o8 8ourth &%n%ration SQL ?u%ri%'"
Adh%r%n% to th% SQL la.out rul%' n%%d' to 3%
%n8or%d no0) a' thi' 0ill allo0 th% #ro:%t to ta$%
ad2anta&% o8 Oral% V( SQL ahin& 8ailiti%'" V%r'ion
( o8 Oral% ha' an SQL ah%) 0hih 0ill hold #ar'%d
?u%ri%') Oral% d%t%rmin%' 0h%th%r a ?u%r. i' in th%
ah% 3. doin& a a'% in'%n'iti2% om#ari'on
All od% r%2i%0') 0hih r%?uir% data3a'% a%'')
0ill ha2% a2aila3l%) a' #art o8 th% doum%nt '%t) '?l
tra% out#ut 8ormatt%d 0ith t$#ro8" Thi' out#ut 0ill
3% 8ormall. r%2i%0%d) 3. th% data3a'% t%am) a' #art o8
th% r%2i%0 #ro%''"
,"- SQL Layout
,"* General layout
SQL 'tat%m%nt' 'hould 3% laid out 'o a' to aid
r%ada3ilit. and maint%nan%" Eah 'tat%m%nt 'hould 3%
in a '%#arat% '?l 8il%"
*C Stat%m%nt' 'hould 3% ind%nt%d 'o that
indi2idual lin%' ar% n%atl. ali&n%d"
,C Eah %!#r%''ion in th% SELECT li't 'hould 3%
on a di88%r%nt lin%"
1C E2%r. ta3l% in th% FRO> li't 'hould 3% on a
8r%'h lin%"
,", SQL Keywords
*C Oral% $%.0ord' 'hould 3% %nt%r%d in u##%r
a'%
,C Th% 8ollo0in& $%.0ord' 'hould 3% #la%d on a
n%0 lin% :
SELECT
INTO
FRO>
@DERE
ANDBOR
GROUP AE
DAVING
CONNECT AE
FOR UPDATE OF
ORDER AE
1C All $%.0ord' 0ithin th% 'am% '%l%t 'hould lin%
u# 0ith th% #r%2iou' $%.0ord'" N%'t%d '%l%t
'tat%m%nt' 'hould 3% ind%nt%d and lin%d u# 0ith
th% '%ond 0ord on th% #r%2iou' lin%) %"&" :
SELECT 'al)
5o3)
%nam%)
d%#t
FRO> %m#
@DERE 'al F an.
GSELECT 'al
FRO> %m#
@DERE d%#tno = 1-C
ORDER AE 'alH
4C Lin%' 0hih don9t 'tart 0ith a li't%d $%.0ord
'hould 3% lin%d u# 0ith th% '%ond 0ord on th%
#r%2iou' lin%) %"&" :
SELECT %nam%)
d%#t
FRO> %m#
,"1 Constants and variables.
*C Con'tant') #ro&ram 2aria3l%' %t" 'hould 3%
on th% ri&ht hand 'id% o8 a @DERE or DAVING
lau'%"
SELECT %nam%
FRO> %m#
@DERE %m#no = 9*,1,9
Or
SELECT %nam%
FRO> %m#
@DERE %m#no = :*
,"4 Outer Joins.
Column' r%?uirin& to 3% out%r :oin%d 'hould
a##%ar on th% ri&ht hand 'id% o8 a @DERE or DAVING
lau'%"
SELECT %nam%
FRO> %m# %)
d%#t d
@DERE %"%m#no = d"%m#noGIC
,"6 Table aliases.
Ta3l% alia'%' 'hould 3% u'%d in all ?u%ri%'
that ha2% mor% than on% ta3l% in th% FRO> lau'%"
Th% u'% o8 ta3l% alia'%' '#%%d' u# th% #ar'% #ha'%
o8 an oral% ?u%r.) 3. r%duin& th% num3%r o8
r%ur'i2% '?l ?u%ri%'"
SELECT ountGJC
FRO> o% o)
o%Klin$ l)
o%Klin$Knam% n
@DERE o"o% = l"o%
AND l"nam% = n"nam%
Noti% th% ta3l% alia'%' o)l)n and th%ir
'u3'%?u%nt u'% in th% 0h%r% lau'%"
,"7 Ordering of where clauses.
A' an aid to und%r'tandin&) @DERE lau'%'
'hould 3% laid out 0ith th% :oin lau'%' 8ir't)
and th% r%'trition lau'%' '%ond"
1"- atabase selects.
1"* Ordering of the !"O# clause.
Thi' rul% i' 8or 0h%n th% oral% o#timi'%r i'
'tu$ 8or a &ood id%a" Th% Oral% o#timi'%r 0or$'
in th% 8ollo0in& mann%r" It loo$' at %ah o8 th%
@DERE lau'%' and a''i&n' th% ta3l%' on%rn%d a
num3%r 3a'%d on th% t.#% o8 #r%diat% %"&" 8i%ld =
9on't9 or 8i%ldGIC = 8i%ld" It th%n hoo'%' th%
ta3l% 0ith th% lo0%'t 'or% a' th% dri2in& ta3l%"
Aut) and it' a 3i& on%) i8 mor% than on% ta3l% ha'
th% 'am% lo0%'t 'or% th%n it hoo'%' th% la't
ta3l% in th% FRO> li't to 3% th% dri2in& ta3l%"
S%% a##%ndi! A 8or a li'tin& o8 th% #r%diat%
'orin& '.'t%m"
In thi' %!am#l% th%r% ar% ind%!%' on th%
ta3l%' a' 8ollo0'
Ind%!%' :
uni?u% on o%GidC
uni?u% on o%Klin$Go%C
uni?u% on o%Klin$Knam%Gnam%C
non uni?u% on o%Go%C
SELECT ountGJC
FRO> o%Klin$ l)
o%Klin$Knam% n)
o% o
@DERE o"o% = l"o%
AND l"nam% = n"nam%
Tim% 7,*",* '%'
SELECT ountGJC
FRO> o% o)
o%Klin$ l)
o%Klin$Knam% n
@DERE o"o% = l"o%
AND l"nam% = n"nam%
Tim% *+("-6 '%'
Noti% th% di88%r%n% in ?u%r. timin&'" Th%
onl. di88%r%n% in th% t0o ?u%ri%' i' th% ord%r o8
th% ta3l%' in th% FRO> lau'%" Th%r%8or% th% ta3l%
r%turnin& th% l%a't num3%r o8 ro0' 'hould 3% la't
in th% FRO> li't"
1", $nintentional disabling of inde%es.
Thi' i' a 2%r. %a'. 0a. to inad2%rt%ntl.
di'a3l% th% u'% o8 th% ind%!%'"
On ta3l% o%) 0hih i' d%'ri3%d in th%
a##%ndi!" Column id ha' a datat.#% o8 num3%r"
SELECT id)
o%
FRO> o%
@DERE toKharGidC = *,1,
Tim% +( '%'"
0h%r%a'
SELECT id)
o%
FRO> o%
@DERE id = *,1,
Tim% "4 '%'"
Th% r%a'on 8or thi' i' that oral% annot u'%
an ind%! i8 th% olumn i' modi8i%d in th% 0h%r%
lau'%" It i' u# to th% a##liation #ro&ramm%r to
%n'ur% that) @DERE lau'% olumn') ar%n9t modi8i%d
in an. 0a."
Not% that th% 8ollo0in& ?u%r. 0ill al'o 'to#
th% u'% o8 ind%!%'"
SELECT id)
o%
FRO> o%
@DERE idI* = *,11
Dat%' in th% 0h%r% lau'% an al'o au'%
#ro3l%m'" To '%l%t all th% r%ord' %nt%r%d on a
%rtain da. th% 8ollo0in& thr%% id%a' om% to
mind"
SELECT J
FRO> o%
@DERE trunGtim%'tam#C = 9,7L>ARL+*9
SELECT J
FRO> o%
@DERE tim%'tam# 3%t0%%n 9,7LmarL+*9
AND 9,(LmarL+*9
SELECT J
FRO> o%
@DERE tim%'tam# F= toKdat%G9,7LmarL+*:--:--9)
9ddLmonL..:hh,4:mi9C
AND tim%'tam# M toKdat%G9,(LmarL+*:--:--9)
9ddLmonL..:hh,4:mi9C
Th% 8ir't on% 0h%n run ta$%' ,4- '%ond' to
#rodu% a r%'ult"
Th% '%ond on% onl. ta$%' *"-6 '%ond' to
run) ho0%2%r) it ha' a 8%atur%tt%" It 0ill
inlud% an. r%ord' 8or midni&ht on th% ,(th o8
marh"
Th% la't on% onl. ta$%' "6 o8 a '%ond and
it do%'n9t r%tri%2% th% %!tra r%ord' 8or
midni&ht"
E!am#l%' alon& th% lin%' o8 that 'ho0n 3%lo0
ar% al'o on'id%r%d to 3% olumn modi8iation'"
Th%r%8or% onat%natin& th% olumn') 'to#' th%
ind%!%' 8rom 3%in& u'%d"
%!am#l% aC 'hould 3% r%0ritt%n a' in %!am#l%
3C
aC
SELECT J
FRO> :o3
@DERE d3KidNN:o3Kno = 9AO-*--,-*9
3C
SELECT J
FRO> :o3
@DERE d3Kid = 9AO9
AND :o3Kno = 9-*--,-*9
D%2%lo#%r' n%%d to 3% a0ar% o8 th% t.#%
on2%r'ion' that Oral% #%r8orm' im#liitl."
Oral% ma. hoo'% to on2%rt %ith%r th% olumn or
th% on'tant" I8 th% olumn i' ho'%n th%n th%
ind%!%' annot 3% u'%d" Th% on2%r'ion ho'%n i'
d%8in%d in th% 8ollo0in& ta3l%"
>i!%d Common Funtion
datat.#% Unit ho'%n
LLLLLLLLLLLLLL LLLLLLLLLLL LLLLLLLL
Char 0ith num3%r num3%r toKnum3%r
Char 0ith ro0id ro0id toKro0id
Char 0ith dat% dat% toKdat%
Th% 8ollo0in& %!am#l% 'ho0' ho0 th%
on2%r'ion ta3l% &i2%n a3o2% 0or$' in #rati%"
SELECT d%#tno
FRO> d%#t
@DERE d%#tno = *1,4
ind%!%'
non uni?u% ind%! on d%#tno
Th% '%l%t 0ould not u'% th% ind%! 3%au'%
th% olumn d%#tno 0ould 3% toKnum3%r%d 3. th%
$%rn%l"
Th% 8ollo0in& ?u%ri%' 0ill u'% th% ind%!%'"
SELECT d%#tno
FRO> d%#t
@DERE d%#tno = toKharG*1,4C
SELECT d%#tno
FRO> d%#t
@DERE d%#tno = 9*1,49
1"1 Int%ntionall. di'a3lin& ind%!%'"
@h%n it ha' 3%%n d%id%d) that %rtain
ind%!%' n%%d to 3% di'a3l%d) 8or ?u%r.
o#timi'ation) th% 8ollo0in& olumn modi8i%r' 0ill
3% u'%d"
Datat.#% Inhi3it %!#r%''ion
LLLLLLLL LLLLLLLLLLLLLLLLLL
Char harNN99
num3%r num3%rI-
dat% addKmonth'Gdat%)-C
Th% u'% o8 n2lGolumn)-C 0or$' 0ith all
datat.#%') ho0%2%r) it ould 3% on8u'in& in
?u%ri%' 0hih #%r8orm a lot o8 arithm%ti
alulation" S%% %!am#l% 3%lo0"
SELECT d%#tno
FRO> d%#t
@DERE n2lGd%#tno)-C = 9*,149
1"4 Investigate "ewriting the Query
SQL i' a 2%r. %!#r%''i2% lan&ua&% and th%r%
ar% normall. '%2%ral 0a.' o8 #%r8ormin& th% 'am%
?u%r." D%2%lo#%r' 'hould in2%'ti&at% di88%r%nt
0ordin&' o8 th% 'am% ?u%r.) 'o a' to id%nti8. th%
o#timal ?u%r."
Thi' an 3% d%mon'trat%d 3. th% 8ollo0in&
%!am#l%) 0hih i' a3out 8indin& all th% #%o#l% 0ho
don9t ha2% :o3' to do" Th%r% ar% ++ #%o#l% in th%
'.'t%m and ++-- :o3'
Th%r% ar% ind%!%' on nam% on 3oth ta3l%'"
Th% 8ir't att%m#t
SELECT #"nam%
FRO> #%o#l% #)
:o3 :
@DERE #"nam% = :"nam%GIC
AND :"nam% i' null
8r%d th% ,(
* r%ord '%l%t%d"
Tim% 6*"4- '%'"
Not a 2%r. &ood r%'ult thi' tim%"
Th% '%ond att%m#t
SELECT nam%
FRO> #%o#l%
@DERE nam% not in
GSELECT nam%
FRO> :o3C
8r%d th% ,(
* r%ord '%l%t%d"
Tim% 7"** '%'
A muh 3%tt%r att%m#t) th%r% i' n%arl. an
ord%r o8 ma&nitud% im#ro2%m%nt" @% mi&ht no0 3%
inlin%d to r%'t on our laur%l') ma$% a u# o8 t%a
and #ut our 8%%t u#) ho0%2%r) i8 0% orr%lat% th%
'u3 ?u%r. to &%t"
SELECT nam%
FRO> #%o#l% #
0h%r% not nam% in
GSELECT nam%
FRO> :o3 :
@DERE #"nam% = :"nam%C
8r%d th% ,(
* r%ord '%l%t%d"
Tim% *"-; '%'"
1"6 $se of the &%ists o'erator
On% o#%rator 0hih '%%m' to 3% i&nor%d i' th%
EPISTS o#%rator" Thi' an 3% #artiularl. u'%8ul
in 8orm' 0or$ 8or 2alidatin& 8or%i&n $%.'" In th%
8ollo0in& %!am#l% 0% 0i'h to $no0 0h%th%r 98r%d
th% 469 ha' an. :o3'"
Th% 8ir't %!am#l% i'
SELECT di'tint 9!9
FRO> :o3
@DERE nam% = 98r%d th% 469
* r%ord '%l%t%d"
Tim% -"46 '%'"
Th% '%ond %!am#l% u'%' th% %!i't' o#%rator
and i' almo't t0i% a' 8a't"
SELECT 9!9
FRO> dual
@DERE %!i't'
G SELECT 9!9
FRO> :o3
0h%r% nam% = 98r%d th% 469C
* r%ord '%l%t%d"
Tim% -",7 '%'"
Th% r%a'on thi' i' 8a't%r i' that 0ith th%
%!i't' o#%rator th% oral% $%rn%l $no0' that on%
it ha' 8ound on% math it an 'to#" It th%r%8or%
do%'n9t ha2% to ontinu% th% FTS Ga TLA GThr%%
L%tt%r Aron.mC 8or Full Ta3l% SanC"
Thin&' 'tart 3%omin& int%r%'tin&) no0 th%
atual 2alu% o8 th% data it%m 3%in& '%arh%d on
d%t%rmin%' 0hih ?u%r. to u'%" Con'id%r th% #%o#l%
ta3l% 0ith *-)--- %ntri%'"
En?uirin& a3out 98r%d th% 149 and 98r%d th%
++++9 &i2%' th% 8ollo0in&"
SELECT di'tint 9!9
FRO> :o3
@DERE nam% =98r%d th% 149
Tim% 7"76 '%'"
SELECT 9!9
FRO> dual
@DERE %!i't'
GSELECT 9!9
FRO> :o3
@DERE nam% = 98r%d th% 149C
Tim% -",; '%'"
SELECT 9!9
FRO> dual
@DERE %!i't'
GSELECT 9!9
FRO> :o3
@DERE nam% = 98r%d th% ++++9C
Tim% ;",; '%'"
O$ I h%at%d 'om%0hat th% data &o%' into th%
ta3l% in nam% ord%r" Thu' 98r%d th% *9 &o%' in
8ir't data 3lo$ and 98r%d th% ++++9 &o%' in la't
on%"
D%2%lo#%r' 'hould 3% a0ar% that) th%
%88ii%n. o8 EPISTS and IN i' d%#%ndant on th%
amount o8 data in %ah ta3l%" A ?u%r. 0ith IN in
it dri2%' 8rom th% 'u3?u%r. a%''in& th% main
?u%r. 8or %ah ro0 r%turn%d) 0h%n) a ?u%r. u'%'
EPISTS it dri2%' 8rom th% main ?u%r. a%''in& th%
'u3?u%r. 8or %ah ro0 r%turn%d" So i8 th% 'u3?u%r.
r%turn' 8%0 ro0') 3ut) th% main ?u%r. r%turn' a
lot o8 ro0' 8or %ah ro0 8rom th% 'u3?u%r. u'% th%
IN o#%rator"
1"7 on(t 'erfor) unnecessary *oins.
In 'om% #art' o8 our '.'t%m) d%2%lo#%r' ar%
:oinin& onto th% '.'K#aram ta3l%" Thi' i' 3ad
#rati% and mu't 3% 'to##%d" Th% '.'K#aram' ta3l%
0a' d%'i&n%d to hold 'tati '.'t%m 0id% 2alu%'"
Th% orr%t u'% o8 thi' ta3l%) i' 8or th%
a##liation od% to &%t th% 2alu%' it r%?uir%'
on% at th% 'tart o8 th% od%) or in th% a'% o8
r%&ular u#dat% .l%') at th% 'tart o8 %ah 'uh
.l%"
At th% lo&ial l%2%l) an. runtim%
modi8iation o8 '.'K#aram') #ro3a3l. indiat%'
mi''in& %ntiti%'"
1"( "esource intensive o'erations
Qu%ri%' 0hih u'% DISTINCT) UNION) >INUS)
INTERSECT) ORDER AE and GROUP AE all u#on th%
$%rn%l to #%r8orm r%'our% int%n'i2% 'ort'" A
DISTINCT r%?uir%' on% 'ort) th% oth%r '%t
o#%rator' r%?uir% at l%a't t0o 'ort'" Oth%r 0a.'
o8 0ritin& th%'% ?u%ri%' 'hould 3% 8ound" >o't
?u%ri%' that u'% th% '%t o#%rator') UNION)>INUS
and INTERSECT) an 3% r%0ritt%n in oth%r 0a.'"
1"; $se realistic test data.
R%ali'ti t%'t data) 0hih math%' 3oth in
2olum% and 2alu%') that 'ho0n in th% ER dia&ram'
0ill 3% u'%d"
Th% 8ollo0in& i' 3a'%d on th% %!am#l% u'%d in
1"4 a3out r%0ordin& ?u%ri%'" Th%r% ar% no0 +++
#%o#l% in th% ta3l% and +++- :o3'" Thu' 0% ha2%
inr%a'%d our #%o#l% 3. a 8ator o8 t%n"
Noti% ho0 th% ?u%r. #%r8orm%d 0ith an out%r
:oin i' muh ?ui$%r than that #%r8orm%d 3. th%
'u3?u%r." Thi' i' a om#l%t% r%2%r'al o8 th%
r%'ult in 1"4"
Thi' d%mon'trat%' ?uit% l%arl. that th% '?l
d%2%lo#%r mu't ha2% a $no0l%d&% o8 3oth th%
'trutur% o8 th% data and th% t.#ial num3%r o8
ro0' in %ah ta3l%"
SELECT #"nam%
FRO> #%o#l% #)
:o3 :
@DERE #"nam% = :"nam%GIC
AND :"nam% i' null
8r%d th% ,*;
Tim% ,1",- '%'"
SELECT nam%
FRO> #%o#l%
@DERE not nam% in
GSELECT nam%
FRO> :o3C
8r%d th% ,*;
Tim% *+1"47 '%'"
SELECT nam%
FRO> #%o#l% #
@DERE not nam% in
GSELECT nam%
FRO> :o3 :
@DERE #"nam% = :"nam%C
8r%d th% ,*;
Tim% ;"77 '%'"
1"+ $se of +, o'erator
Unl%'' it i' a3'olut%l. n%%''ar. a2oid u'in&
th% <= o#%rator" Th% u'% o8 thi' o#%rator di'a3l%'
th% u'% o8 ind%!%') 3%au'% th% Oral% $%rn%l
a''um%' that th% ?u%r. 0ill 3% r%tri%2in& mo't o8
th% ro0' in th% ta3l%"
1"*- $se Oracle(s trace facility.
For %2%r. ?u%r.) %2%n th% 'im#l%'t) h%$ th%
out#ut 8rom oral%9' tra% 8ailit." Th% 8ir't
't%# in o#timi'in& ?u%ri%' i' to %liminat% FTS9')
thi' an 3% don% u'in& tra%" S%% APPENDIP F 8or
d%tail' on th% tra% 8ailit."
1"** #anage)ent of oracle cursors.
@h%r% %2%r #o''i3l%) oral% ur'or' 'hould
3% d%lar%d at th% 'tart o8 th% #ro&ram" It i'
al'o &ood #rati% to t%ll th% '.'t%m th% ma!imum
num3%r o8 ur'or' .ou 0ant) at th% 'tart o8 th%
#ro&ram" Thi' an 3% don% in DA 3. o#%nin& th%
ur'or' .ou r%?uir%) in ProJ '%t >APCURSORS"
Th%r% ar% t0o 9%!#%n'i2%9 o#%ration' durin&
th% %!%ution o8 a ?u%r.) a#art 8rom r%turnin& th%
ro0'" Th%'% ar% a''oiat%d 0ith th% 9#ar'%9 and
93ind9 #ha'% o8 ?u%r. %!%ution"
@hat i' m%ant 3. th% #ar'% #ha'%" Thi' i' th%
tim% 0h%n th% '?l t%!t that th% #ro&ramm%r ha'
0ritt%n i' tran'lat%d into an int%rnal
r%#r%'%ntation) that th% Oral% $%rn%l an
und%r'tand" Th% 8ollo0in& ati2iti%' ha##%n durin&
th% #ar'% #ha'%"
aC data ditionar. loo$ u# and '%urit.
h%$in&" Thi' ati2it. au'%' th% oral% $%rn%l
to #rodu% int%rnal '?l ?u%ri%') 0hih ar% all%d
r%ur'i2% ?u%ri%') to h%$ 'uh thin&' a' 0h%th%r
thi' u'%r i' allo0%d a%'' to thi' olumn %t"
3C ?u%r. o#timi'ation" Part o8 th% ?u%r.
o#timi'ation 0hih d%al' 0ith 2i%0' and 'u3
?u%ri%' i' #%r8orm%d"
P%r8ormin& all o8 th% a3o2% an ta$% a
on'id%ra3l% tim%" Th%r%8or% th%. 'hould 3% don%
a' in8r%?u%ntl. a' #o''i3l%"
Th% 3indin& #ha'% ta$%' #la% a8t%r th% #ar'%
#ha'%" It i' at thi' 'ta&% that th% u'%r 2aria3l%'
ar% d%id%d" For in'tan% in th% ?u%r. '%l%t 9!9
8rom #%r'on 0h%r% nam% = :* th% ho't 2aria3l% *
0ould ha2% it' 2alu% 93ound9 into th% ?u%r. durin&
3indin& 3. ha2in& th% addr%'' o8 :* a''oiat%d
0ith th% ho't 2aria3l%"
Und%r normal irum'tan%') 0m' #ro&ram'
'hould #%r8orm th% 8ollo0in& 't%#') 8or a ?u%r.
that i' th% 3% %!%ut%d mor% than on%"
St%# *
Durin& #ro&ram 'tartLu# '%t u# and #ar'% th%
?u%ri%' 0ith all' to '?lK'%tLu#"
St%# ,
E!%ut% th% ?u%r. 0ith a all to '?lK%!%ut%
'u##l.in& th% n%%''ar. 3ind 2aria3l%'"
St%# 1
F%th and #ro%'' th% r%turn%d ro0' 3. u'in&
'?lK8%th"
To %!%ut% th% ?u%r. a&ain) r%turn to 't%# ,
and 'u##l. n%0 3ind 2aria3l%'" For 8urth%r
in8ormation '%% th% doum%nt %ntitl%d
DAKu'%r"do"
1"*, Th% *-)*6),- #%r%nt rul%
Onl. u'% ind%!%' 8or r%tri%2in& data 8rom
ta3l%') 0h%r% .our 0ant l%'' than *6 #%r%nt o8
th% ro0'" FTS9' ar% ?ui$%r i8 .ou 0ant mor% than
*6 #%r%nt o8 a ta3l%' data"
Th% rul% i' all%d th% *-)*6),- #%r%nt rul%)
3%au'% it d%#%nd' on 0hih oral% doum%nt .ou
r%ad) a' to 0h%th%r it' *-)*6 or ,- #%r%nt"
4"- Insert state)ents.
4"* $se of - in insert state)ents
Althou&h th% u'% o8 th% 'horthand harat%r
9J9 i' allo0%d 3. th% oral% $%rn%l) it i'
on'id%r%d to 3% 3ad #ro&rammin& #rati%" It i'
not allo0%d in th% @>S #ro:%t"
Th% r%a'on 8or it 3%in& 3ad #rati%) i' that
i8 a ta3l% i' modi8i%d durin& an u#&rad% to th%
data3a'%) 'u3'%?u%nt in'%rt' ould 8ail out in th%
8i%ld"
6"- $'date State)ents.
6"* Correlated u'dates.
On% o8 th% 'lo0%'t ommand' in SQL i' th%
UPDATE" Thi' i' lar&%l. du% to th% 8at that mo't
orr%lat%d u#dat%' r%?uir% a 8ull ta3l% 'an"
Thi' r%'ult' in 2%r. 'lo0 #%r8orman% 0h%n th%
ta3l% i' %!tr%m%l. lar&%"
Th% 8ollo0in& u#dat% 'tat%m%nt i' t.#ial o8
orr%lat%d u#dat%':
U#dat% Tar&%tKTa3l%
S%t Tar&%tKFi%ld = GS%l%t Sour%KIn8ormation
From Sour%KTa3l%
@h%r% Sour%KTa3l%"/%. =
Tar&%tKTa3l%"/%.C
@h%r% %!i't' GS%l%t 9!9
From Sour%KTa3l%
@h%r% Sour%KTa3l%"/%. =
Tar&%tKTa3l%"/%.C
P%r8orman% #ro3l%m' ari'% 3%au'% th%r% i'
no m%thod o8 %liminatin& ro0' in th% Tar&%tKTa3l%
3a'%d on in8ormation in th% Sour%KTa3l%" I8
oth%r ondition' in th% U#dat%9' @h%r% lau'% do
not di'?uali8. mo't o8 th% ro0' in th%
Tar&%tKTa3l%) thi' u#dat% 0ill r%?uir% 'u3'tantial
#ro%''in& tim%"
Th% 8ollo0in& PLBSQL od% %88%ti2%l. u'%' an
ind%! on th% /%. 8i%ld to a%'' onl. th%
a##ro#riat% r%ord' in th% Tar&%tKTa3l%:
D%lar%
Cur'or Sour% i'
S%l%t J
From Sour%KTa3l%H
A%&in
For Ro0 in Sour% Loo#
U#dat% Tar&%tKTa3l%
S%t Tar&%tKFi%ld = Ro0"Sour%KIn8ormation
@h%r% /%. = Ro0"/%.H
End Loo#H
E!%#tion
@h%n OTDERS Th%n
NullH
EndH
Thi' PLBSQL 'ri#t loo#' throu&h %ah o8 th%
r%ord' in th% Sour%KTa3l% and u#dat%' th%
a##ro#riat% ro0 in th% Tar&%tKTa3l%) i8 an."
E''%ntiall.) thi' tran'8%r' th% 8ull ta3l% 'an to
th% Sour%KTa3l% and allo0' th% ind%! on th%
Tar&%tKTa3l% to 3% u'%d %88%ti2%l."
Runnin& a t.#ial orr%lat%d u#dat% on an
;)--- ro0 ta3l% to u#dat% + r%ord' r%?uir%d *+"4
CPU '%ond'" Th% 'am% u#dat% u'in& th% PLBSQL
'ri#t %!%ut%d in *"*, CPU '%ond' LL a +4Q
#%r8orman% im#ro2%m%nt"
Th% PLBSQL 'ri#t 0ill out#%r8orm th%
orr%lat%d u#dat% 0h%n%2%r th% Sour%KTa3l% i'
'mall%r than th% Tar&%tKTa3l%" Th% lar&%r th%
Tar&%tKTa3l% om#ar%d to th% Sour%KTa3l%) th%
mor% 'u3'tantial th% #%r8orman% &ain" @ith an
%88%ti2% ind%!) th% 'iR% o8 th% Tar&%tKTa3l% i'
no lon&%r a 8ator in th% tim% r%?uir%d to u#dat%
th% ta3l%H th% num3%r o8 r%ord' 3%in& u#dat%d
d%t%rmin%' th% #%r8orman%"
R%#lain& th% EPISTS 'u3?u%r. 0ith IN
'u3?u%r. 0ill &i2% 'am% im#ro2%m%nt in mo't a'%'"
7"- O'ti)ising oracle .ueries.
7"* Table access.
Th%r% ar% thr%% 0a.' that Oral% an 8ind a
ro0 in a ta3l%) th%'% ar% :
*C San %ah ro0 in th% ta3l% h%$in&
0h%th%r to '%l%t th% ro0 8or out#ut" Thi' i'
ommonl. $no0n a' a 8ull ta3l% 'an GFTSC) it i'
al'o th% l%a't %88ii%nt m%thod o8 loatin& a ro0"
,C A. u'in& an ind%! to loat% th% ro0"
1C A. u'in& th% ro0id to dir%tl. a%'' th%
ro0 on di'" Thi' i' th% mo't %88ii%nt m%thod o8
a%''in& a ro0" Do not u'% thi' m%thod aro''
tran'ation' a' it i' #o''i3l% 8or a ro0id to
han&%) u'% th% #rimar. $%. o8 th% ta3l% in th%'%
irum'tan%'"
Un8ortunat%l. 0% do not normall. $no0 th%
ro0id) 'o th% 8a't%'t m%thod o8 a%'' i' 3. th%
u'% o8 ind%!%'"
Th% &%n%ral rul%' ar% a' 8ollo0':
Ind%!%' an 3% u'%d in th% 8ollo0in&
irum'tan%'"
*C I8 th% ind%!%d olumn i' m%ntion%d in
th% 0h%r% lau'%"
,C I8 th% ind%!%d olumn i' not modi8i%d
3. a 8untion or) an arithm%ti o#%ration) or 3oth
o8 th%m" Th% 8ollo0in& %!%#tion i' a##lia3l%) a
>INGolumnC) >INGolumnIon'tantC or >APGolumnC)
>APGolumnIon'tantC"
Ind%!%' annot 3% u'%d in th% 8ollo0in&
irum'tan%'"
*C th%r% i' no 90h%r%9 lau'%"
,C th% ind%!%d olumn i' modi8i%d in an. 0a."
1C th% '%arh i' 8or 9null9 or 9not null9
7", Inde%es and /ull.
I8 a r%ord ha' no 2alu% Gi"%" NULLC in th%
olumn '#%i8i%d a' th% ind%! $%.) th%n th%r% 0ill
not 3% an ind%! %ntr. 8or th% r%ord" For thi'
r%a'on th% 8ollo0in& ?u%r. 0ill not u'% an ind%!
on olumn CO>>
SELECT J
FRO> %m#
@DERE omm i' NULL
Oral% a''um%' that th% ma:orit. o8 r%ord'
in a ta3l% 0ill ontain 2alu%' 8or ind%!%d
olumn') 3%au'% o8 thi' a FTS 0ill 3% %!%ut%d
8or th% 8ollo0in& ?u%r."
SELECT J
FRO> %m#
@DERE omm i' not NULL
A FTS ma. not 3% a##ro#riat% i8 th% olumn
CO>> i' '#ar'%l. #o#ulat%d" Th%r% i' an %!am#l% o8
ho0 to alt%r th% ?u%r. to ma$% u'% o8 th% ind%!"
SELECT J
FRO> %m#
@DERE omm F L-"-*
7"1 Inde%es and (/OT,( 'redicates.
@h%n a #r%diat% ontain' a Snot %?ualS
ondition) Oral% 0ill not on'id%r an ind%!)
ho0%2%r) Oral% 0ill int%r#r%t oth%r 9not9
#r%diat%' 'o a' to u'% an. ind%!%' a2aila3l% %"&"
9not 'al F 6-9 =F 9'al M= 6-9
9not 'al M= 6-9 =F 9'al F 6-9
7"4 Grou' by and 'redicate clauses.
Th% #%r8orman% o8 &rou# 3. ?u%ri%' an 3%
im#ro2%d 3. %liminatin& un0ant%d ro0' %arl. in th%
'%l%tion #ro%''" Th% 8ollo0in& t0o ?u%ri%'
r%turn th% 'am% data) ho0%2%r) th% '%ond i'
#ot%ntiall. ?ui$%r) 'in% ro0' 0ill 3% %liminat%d
3%8or% th% '%t o#%rator' ar% a##li%d"
SELECT :o3)
a2&G'alC
FRO> %m#
GROUP AE :o3
DAVING :o3 = 9#r%'id%nt9
OR :o3 = 9mana&%r9
SELECT :o3) a2&G'alC
FRO> %m#
@DERE :o3 = 9#r%'id%nt9
OR :o3 = 9mana&%r9
GROUP AE :o3
7"6 #ulti'le inde% .ueries.
@h%n a ?u%r. ha' t0o or mor% %?ualit.
#r%diat% lau'%') multi#l% ind%!%' ma. 3% u'%d"
Oral% 0ill m%r&% th% ind%!%' at run tim%)
r%turnin& ro0' that ar% in 3oth ind%!%') 8or
%!am#l%"
SELECT %nam%
FRO> %m#
@DERE d%#tno=,-
AND :o3=9mana&%r9
@ill m%r&% th% 8ollo0in& ind%!%'"
non uni?u% ind%! on :o3
non uni?u% ind%! on d%#tno
7"7 0hen inde%es cannot be )erged
@h%r% a ?u%r. an u'% 3oth ran&% and %?ualit.
#r%diat%') a' in th% 8ollo0in& %!am#l%) oral%
annot m%r&% th% ind%!%'" Th% ind%! on :o3 0ill 3%
u'%d to loat% th% 9mana&%r9 ro0') th%'% 0ill th%n
3% h%$%d to %n'ur% d%#tno i' &r%at%r than *-"
SELECT J
FRO> %m#
@DERE :o3=9mana&%r9
AND d%#tno F *-
ind%!%':
non uni?u% ind%! on :o3
non uni?u% ind%! on d%#tno
@h%n th%r% i' no l%ar #r%8%r%n% a' to 0hih
ind%! to u'%) '%% th% 8ollo0in& ?u%r.) Oral% 0ill
u'% onl. on% ind%!) 3%au'% it i' in%88ii%nt to
m%r&% th%m" Not% that a 'an o8 th% '%ond ta3l%)
0ill ha2% to 3% don% 8or %ah ro0 r%turn%d in th%
8ir't ta3l%"
Sin% 3oth ind%!%' ar% non uni?u%) Oral%
0ill hoo'% th% ind%! 0hih) it %nount%r' 8ir't
in th% DCKINDEPES ah%" In #rati%) a'
d%2%lo#%r' annot '%% th% ah%) th% hoi% i'
ar3itrar."
SELECT %nam%
FRO> %m#
@DERE 'al F *
AND %m#no F *
ind%!%' :
non uni?u% ind%! on %m#no
non uni?u% ind%! on 'al
7"( Su''ression of inde%es for 'erfor)ance
@h%n th%r% i' a hoi% 3%t0%%n m%r&in& a
uni?u% ind%! 0ith a non uni?u% on%) th% $%rn%l
0ill al0a.' u'% th% uni?u% ind%! and a2oid
#%r8ormin& th% m%r&%" Th% r%a'onin& 3%hind thi' i'
that th% uni?u% ind%! 0ill r%turn onl. on% ro0"
S%% th% 8ollo0in& %!am#l%"
SELECT %nam%
FRO> %m#
@DERE 'al = 1---
AND %m#no = (+-,
ind%!%' :
uni?u% ind%! on %m#no
non uni?u% ind%! on 'al
Onl. th% %m#no ind%! 0ill 3% u'%d) i8 a
r%ord i' 8ound th%n th% ro0 0ill 3% h%$%d to
'%% i8 th% 'al = 1---"
Oral% 0ill onl. u'% 6 ind%!%' in a 'in&l%
'?l 'tat%m%nt" A8t%r 6 ind%!%' ha2% 3%%n m%r&%d)
th% $%rn%l 0ill h%$ tho'% ro0' r%turn%d 8or th%
2alu%' in th% r%mainin& #r%diat%'"
SELECT J
FRO> %m#
@DERE %m#no =(;44
AND :o3 = 9'al%'man9
AND d%#tno = 1-
AND 'al = *6--
AND omm = -
AND %nam% = 9turn%r9
ind%!%' :
non uni?u% ind%! on %m#no
non uni?u% ind%! on :o3
non uni?u% ind%! on d%#tno
non uni?u% ind%! on 'al
non uni?u% ind%! on omm
non uni?u% ind%! on %nam%
A%au'% all th% #r%diat%' 'or% %?uall.)
aordin& to APPENDIP A) onl. 8i2% o8 th% a3o2%
ind%!%' 0ill 3% u'%d" Ro0' that ar% r%turn%d 0ill
3% h%$%d 3. th% $%rn%l to '%% i8 th% la't 2alu%
i' orr%t"
7"; Concatenated inde%es
Conat%nat%d ind%!%' ar% ind%!%' that
r%8%r%n% mor% than on% olumn" Th% ind%! 0ill 3%
a2aila3l% 8or 'orin&) #ro2id%d that th% 8ir't
#art o8 th% ind%! i' #r%'%nt and u'a3l%"
In th% 8ollo0in& %!am#l%' a''um% a
onat%nat%d ind%! on :o3 and d%#tno"
SELECT J
FRO> %m#
@DERE :o3 = 9#r%'id%nt9
AND d%#tno = *-
Th% 8ull ind%! 0ill 3% u'%d"
SELECT J
FRO> %m#
@DERE d%#tno = *-
AND :o3 = 9#r%'id%nt9
Th% 8ull ind%! 0ill 3% u'%d"
SELECT J
FRO> %m#
@DERE d%#tno = *-
Th% ind%! 0ill not 3% u'%d) th% l%adin& #art
o8 th% ind%! i' mi''in& 8rom th% 'tat%m%nt"
SELECT J
FRO> %m#
@DERE :o3 = 9anal.'t9
Th% l%adin& #art o8 th% ind%! 0ill 3% u'%d)
d%2%lo#%r' 'hould h%$ th% '%l%ti2it. o8 thi'
#art o8 th% ind%!) it ma. not 3% '%l%ti2%) and
n%%d' to 3% 'u##r%''%d"
SELECT J
FRO> %m#
@DERE :o3 <= 9l%r$9
AND d%#tno = *-
Th% ind%! annot 3% u'%d 3%au'% th% <=
#r%2%nt' th% u'% o8 th% l%adin& #art o8 th% ind%!"
7"+ Or o'ti)isation
Unli$% th% 9AND9 o#%rator 0hih r%?uir%' that
a ro0 #a''%' 3oth #r%diat%') th% 9OR9 o#%rator
r%?uir%' a ro0 to #a'' %ith%r o8 th% #r%diat%'"
S%% th% 8ollo0in& %!am#l%
SELECT %nam%)
'al)
:o3
FRO> %m#
@DERE 'al = 1---
OR :o3 = 9l%r$9
ind%! :
non uni?u% on :o3
I8 th% :o3 ind%! i' u'%d to id%nti8. th% ro0')
th%n it 0ould onl. r%turn tho'% %m#lo.%%' 0ho ar%
9l%r$'9) it 0ould not r%turn tho'% %m#lo.%%'
0h%r% th% 'al i' 1--- and :o3 i' not 9l%r$9"
A 'in&l% onat%nat%d ind%! on :o3) 'al or
'al):o3 annot 3% u'%d 3%au'% r%ord' 0ith 2alu%'
8or th% '%ond $%.) mu't 3% 8ound r%&ardl%'' o8 th%
2alu% o8 th% 8ir't $%."
I8 0% ha2% an ind%! on 'al):o3) th%n 0ith th%
ind%! on :o3 th% $%rn%l an o#timi'% th% ?u%r." A
'in&l% olumn ind%! on 'al ould al'o 3% u'%d"
I8 th%r% ar% ind%!%' a2aila3l% 8or 3oth th%
#r%diat%' that ar% or9d) th%n th% ?u%r. 0ill 3%
#ro%''%d on%#tuall.) a' th% union o8 t0o '%l%t
'tat%m%nt'" Thi' i' 'ho0n in th% %!am#l% 3%lo0"
SELECT %nam%)
'al)
:o3
FRO> %m#
@DERE 'al = 1---
OR :o3 = 9l%r$9
ind%!%' :
non uni?u% on :o3
non uni?u% on 'al
A%om%' :
SELECT %nam%)
'al)
:o3
FRO> %m#
@DERE :o3 = 9l%r$9
UNION
SELECT %nam%)
'al)
:o3
FRO> %m#
@DERE 'al = 1---
AND :o3 <= 9l%r$9
Noti% that th% $%rn%l ha' u'%d th% la't
#r%diat% in th% or lau'% 8or th% 'in&l%
ondition ?u%r.) and it ha' u'%d th% 'am%
#r%diat% to 8orm th% S<=S ondition in th%
dou3l% ondition ?u%r." Noti% that i8 0% r%0rit%
th% ?u%r. a'
SELECT %nam%)
'al)
:o3
FRO> %m#
@DERE :o3 = 9l%r$9
OR 'al = 1---
ind%!%' :
non uni?u% on :o3
non uni?u% on 'al
A%om%' :
SELECT %nam%)
'al)
:o3
FRO> %m#
@DERE 'al = 1---
UNION
SELECT %nam%)
'al)
:o3
FRO> %m#
@DERE :o3 = 9l%r$9
AND 'al <= 1---
From thi') 0% an '%% that it i' 3%'t to
#la% th% #r%diat% a''oiat%d 0ith th% mo't
'%l%ti2% ind%! 8ir't in th% 0h%r% lau'%) and th%
l%a't '%l%ti2% la't" Thi' minimi'%' th% num3%r o8
h%$' 8or 9<=9"
Th%'% 9or9 o#timi'ation' annot ta$% #la%
0h%n th% '?l ?u%r. ontain' a onn%t 3.) or an
out%r :oin"
7"*- /on correlated sub .ueries
Th%r% ar% t0o a'%' to on'id%r h%r%) 8ir'tl.
?u%ri%' 0hih u'% th% IN o#%rator) and '%ondl.)
?u%ri%' 0hih u'% th% NOT IN o#%rator" @% 0ill
d%al 0ith th% IN o#%rator 8ir't"
Th% 8ollo0in& rul%' a##l. to o#timi'in& th%
?u%r."
*C Th% main and 'u3?u%ri%' ar% o#timi'%d
'%#arat%l."
,C Th% 'am% rul%' 8or o#timi'ation a##l. to
th% main and 'u3?u%ri%') 8or %!am#l%) in th% ?u%r.
3%lo0 th%r% i' no o#timi'ation o8 th% 'u3?u%r.
3%au'% th%r% i' no 0h%r% lau'%"
1C Th% dri2in& ta3l% i' th% ta3l% 8rom th%
'u3?u%r." In th% %!am#l% 3%lo0 thi' 0ill 3% :o3"
4C Th% 'u3?u%r. i' tran'8orm%d into a :oin
3. th% 8ollo0in& m%thod" Th% ro0' 8rturn%d 8rom
th% 'u3?u%r. ar% 'ort%d and du#liat%' r%mo2%d" A
8ull ta3l% 'an o8 th%'% 'ort%d ro0' i' u'%d 8or
a%'') 8inall. th% ta3l% in th% main ?u%r. i'
:oin%d to th% 'ort%d ro0' 8rom th% 'u3?u%r. u'in&
olumn in th% main ?u%r.9' 0h%r% lau'%"
SELECT di'tint nam%
FRO> m%n
@DERE #in in
GSELECT #in
FRO> :o3C
ind%!%' :
&i2%' th% 8ollo0in& %!#lain #lan"
SORTGUNIQUEC
>ERGE 5OIN
TAALE ACCESS GFULLC OF 9>EN9
SORTG5OINC
TAALE ACCESS GFULLC OF 95OA9
E!%ut% tim% 4(6+
Not% that th% SORTGUNIQUEC i' au'%d 3. th%
di'tint"
I8 0% no0 #ut a dumm. 0h%r% lau'% on th% 'u3
?u%r. 0% &%t
SELECT di'tint nam%
FRO> m%n
@DERE #in in
GSELECT #in
FRO> :o3 C
ind%!%' :
uni?u% on :o3G:o3noC
non uni?u% on :o3G#inC
&i2%' th% 8ollo0in& %!#lain #lan
SORTGUNIQUEC
NESTED LOOPS
TAALE ACCESS GFULLC OF 9>EN9
INDEPGRANGE SCANC OF 95OAK*9 GNONKUNIQUEC
Not% that an ind%! ha' 3%%n u'%d on :o3" Thi'
i' th% on% a'% 0h%r% an ind%! an 3% u'%d %2%n
thou&h th%r% i' no 0h%r% lau'% on th% 'u3?u%r."
Th% '?l i' %!%ut%d on%#tuall. a') SELECT
di'tint #in FRO> :o3 ORDER AE #in) th%'% 'ort%d
ro0' ar% th%n :oin%d 0ith th% ro0' 8rom m%n u'in&
th% ind%! :o3G#inC"
Th% u'% o8 NOT IN i' not r%omm%nd%d)
d%2%lo#%r' 'hould on'id%r r%0ordin& ?u%ri%' u'in&
thi' on'trut to u'% out%r :oin') ho0%2%r) it
'hould 3% not%d that out%r :oin' ar% an oral%
%!t%n'ion) and ar% not a2aila3l% on oth%r RDA>S9'"
S%% 3%lo0 8or %!am#l%"
SELECT J
FRO> d%#t
@DERE d%#tno not in
GSELECT d%#tno
FRO> %m#C
Thi' an 3% r%0ritt%n a' th% 8ollo0in& out%r
:oin"
SELECT d"J
FRO> d%#t d)%m# %
@DERE d"d%#tno = %"d%#tnoGIC
AND %"ro0id i' NULL
Thi' r%li%' on th% 8at that %ah ro0 ha' a
uni?u% ro0id) and that) ro0id i' n%2%r NULL" Not%
al'o that an. NOT IN i' %?ui2%l%nt to a NOT
EPISTS" Th%r%8o% an. NOT EPISTS an 3% tran'8orm%d
into an out%r :oin"
7"** Correlated sub .ueries
All Corr%lat%d 'u3?u%ri%' 8ollo0 th% 'am%
%!%ution #ath" Th% main and th% 'u3?u%ri%' ar%
'%#arat%l. o#timi'%d" Th% dri2in& ta3l% in
'%l%t%d 8rom th% main ?u%r." For %ah ro0
r%turn%d in th% main ?u%r.) th% 'u3?u%r. i'
%!%ut%d" Ind%!%' an 3% u'%d 8or th% 0h%r%
lau'%' on 3oth th% main and 'u3?u%r."
APPENDIP A
Qu%r. Path' Ran$%d in Ord%r o8 S#%%d
Th% lo0%r th% ran$) th% 8a't%r th% #ath"
Ran$ Path
====== ==================================
* RO@ID = on'tant
, Uni?u% ind%!%d olumn = on'tant
1 %ntir% uni?u% onat%nat%d ind%! =
on'tant
4 %ntir% lu't%r $%. = orr%'#ondin&
lu't%r $%. in anoth%r ta3l% in
th% 'am% lu't%r
6 %ntir% lu't%r $%. = on'tant
7 %ntir% nonLuni?u% onat%nat%d
ind%! = on'tant
( nonLuni?u% 'in&l% olumn ind%!
m%r&%
; mo't l%adin& onat%nat%d ind%! =
on'tant
+ ind%!%d olumn AET@EEN lo0 2alu%
AND hi&h 2alu%) or ind%!%d
olumn LI/E 9CQ9 G3ound%d ran&%C
*- 'ortBm%r&% G:oin' onl.C
** >AP or >IN o8 'in&l% ind%!%d
olumn
*, ORDER AE %ntir% ind%!
*1 8ull ta3l% 'an'
*4 unind%!%d olumn = on'tant) or
olumn IS NULL) or olumn LI/E
9QCQ9 G8ull ta3l% 'anC
APPENDIP A
Ta3l% Strutur% 8or d%mo'
ta3l% o% Gid num3%rG7)-C)
o% num3%rG*)-C)
tim%'tam#Gdat%CC
Th% 8i%ld id hold' th% uni?u% r%8%r%n% num3%r 'tartin&
at * th% 8i%ld o% hold' a - i8 th% id i' %2%n and a *
i8 it i' odd
uni?u% ind%! on id
nonuni?u% ind%! on o%
th%r% ar% *--)--- ro0' in o%
ta3l% o%Klin$ Go% num3%rG*C)nam% harG*-C
0ith , r%ord'
ta3l% o%Klin$Knam% Gnam% harG*-C)a&% num3%rG1CC
@ith * r%ord
#%o#l% Gnam%) '%!C
:o3G:o3Kid)nam%C
APPENDIP C
U#dat% P%r8orman% RDA>S
5ohn R" Pa$ VAPBV>S
5ul. *() *++- V7"-"1-"4
GR%2i'%d *+LS%#L+-C
U'in& PLBSQL to Enhan%
U#dat% P%r8orman%
On% o8 th% 'lo0%'t ommand' in SQL i' th% UPDATE"
>o't o8t%n) 0h%n a li%nt om#lain' a3out #%r8orman%)
a lar&%) orr%lat%d u#dat% Gor)0or'%) an unorr%lat%d
u#dat%C i' at th% root o8 th% #ro3l%m"O8t%n) %2%n a8t%r
r%atin& th% o#timal ind%!%' and 8in% tunin& th% SQL
'tat%m%nt it'%l8) th% u#dat% i' 'till ho&&in& %normou'
CPU r%'our%' and i' 'till th% 3ottl%n%$ in th% u'%r9'
#rodution 'h%m%"
Th% Corr%lat%d U#dat%
Thi' i' lar&%l. du% to th% 8at that mo't
orr%lat%d u#dat%' r%?uir% a 8ull ta3l% 'an" Thi'
r%'ult' in 2%r. 'lo0 #%r8orman% 0h%n th% ta3l% i'
%!tr%m%l. lar&%"
Th% 8ollo0in& u#dat% 'tat%m%nt i' t.#ial o8
orr%lat%d u#dat%':
U#dat% Tar&%tKTa3l%
S%t Tar&%tKFi%ld = GS%l%t Sour%KIn8ormation
From Sour%KTa3l%
@h%r% Sour%KTa3l%"/%. =
Tar&%tKTa3l%"/%.C
@h%r% %!i't' GS%l%t 9!9
From Sour%KTa3l%
@h%r% Sour%KTa3l%"/%. =
Tar&%tKTa3l%"/%.C
P%r8orman% #ro3l%m' ari'% 3%au'% th%r% i' no
m%thod o8 %liminatin& ro0' in th% Tar&%tKTa3l% 3a'%d on
in8ormation in th% Sour%KTa3l%" I8 oth%r ondition'
in th% U#dat%9' @h%r% lau'% do not di'?uali8. mo't o8
th% ro0' in th% Tar&%tKTa3l%) thi' u#dat% 0ill r%?uir%
'u3'tantial #ro%''in& tim%"
In addition) thi' t.#% o8 ?u%r. 'u88%r' 3%au'% an
ind%! 0ould not h%l# th% Tar&%tKTa3l% a%'' tim%" In
8at) th% onl. ind%! 0hih 0ill im#ro2% th%
#%r8orman% o8 th% #r%%din& u#dat% i' an ind%! on th%
Sour%KTa3l% /%. 8i%ld" I8 th% Sour%KTa3l% i' lar&%)
thi' i' 2%r. u'%8ul"
N%2%rth%l%'') th% 3%'t m%thod o8 u#datin& th%
ta3l% 0ould 3% a3l% to a%'' :u't th% orr%t ro0' in
th% Tar&%tKTa3l% u'in& an %88%ti2% ind%!" Thi' m%thod
i' no0 a2aila3l% u'in& PLBSQL and an ind%! on th%
Tar&%tKTa3l% /%. 8i%ld"
Th% PLBSQL U#dat%
Th% 8ollo0in& PLBSQL od% %88%ti2%l. u'%' an
ind%! on th% /%. 8i%ld to a%'' onl. th% a##ro#riat%
r%ord' in th% Tar&%tKTa3l%:
D%lar%
Cur'or Sour% i'
S%l%t J
From Sour%KTa3l%H
A%&in
For Ro0 in Sour% Loo#
U#dat% Tar&%tKTa3l%
S%t Tar&%tKFi%ld = Ro0"Sour%KIn8ormation
@h%r% /%. = Ro0"/%.H
End Loo#H
E!%#tion
@h%n OTDERS Th%n
NullH
EndH
Thi' PLBSQL 'ri#t loo#' throu&h %ah o8 th%
r%ord' in th% Sour%KTa3l% and u#dat%' th% a##ro#riat%
ro0 in th% Tar&%tKTa3l%) i8 an." E''%ntiall.) thi'
tran'8%r' th% 8ull ta3l% 'an to th% Sour%KTa3l% and
allo0' th% ind%! on th% Tar&%tKTa3l% to 3% u'%d
%88%ti2%l."
P%r8orman% Gain
Runnin& a t.#ial orr%lat%d u#dat% on an ;)--- ro0
ta3l% to u#dat% + r%ord' r%?uir%d *+"4 CPU '%ond'"
Th% 'am% u#dat% u'in& th% PLBSQL 'ri#t %!%ut%d in
*"*, CPU '%ond' LL a +4Q #%r8orman% im#ro2%m%nt"
Th% PLBSQL 'ri#t 0ill out#%r8orm th% orr%lat%d
u#dat% 0h%n%2%r th% Sour%KTa3l% i' 'mall%r than th%
Tar&%tKTa3l%" Th% lar&%r th% Tar&%tKTa3l% om#ar%d to
th% Sour%KTa3l%) th% mor% 'u3'tantial th% #%r8orman%
&ain" @ith an %88%ti2% ind%!) th% 'iR% o8 th%
Tar&%tKTa3l% i' no lon&%r a 8ator in th% tim% r%?uir%d
to u#dat% th% ta3l%H th% num3%r o8 r%ord' 3%in&
u#dat%d d%t%rmin%' th% #%r8orman%"
R%#lain& th% EPISTS 'u3?u%r. 0ith IN 'u3?u%r.
0ill &i2% 'am% im#ro2%m%nt in mo't a'%'"
APPENDIP D
GUIDELINES FOR USING TDE OUTER 5OIN SENTAP
Guid%lin%' 8or U'in& th% Out%r 5oin S.nta! RDA>S
RDA>S Su##ort V7"-
Oto3%r *++-
* INTRODUCTION
Th% #ur#o'% o8 thi' t%hnial not% i' to
#ro2id% 'om% &uid%lin%' on ho0 to u'% th%
out%r :oin 8ailit. #ro2id%d 3. ORACLE"
*"* Out%r 5oin S%manti' L D%8inition'
Th% 8ollo0in& t%rm') u'%d to d%'ri3% th%
o#%ration on out%r :oin') ar% d%8in%d :L
9out%rL:oin olumn9 L a olumn r%8%r%n% 8ollo0%d 3.
th% '.m3ol GIC) %"&" E>PNOGIC
and DEPT"DEPTNOGIC ar% out%r
:oin olumn'
9'im#l% #r%diat%9 L a lo&ial %!#r%''ion ontainin&
no AND9') OR9') or NOT9' G
u'uall. a 'im#l% r%lation 'uh
a' A = A C
9out%r :oin #r%diat%9 L a 'im#l% #r%diat% ontainin&
on% or mor% out%r :oin olumn'"
, OUTER 5OIN SENTAP L RULES
An out%r :oin #r%diat% ma. onl.
ontain out%r :oin olumn' 8rom on% ta3l% G in oth%r
0ord') all out%r :oin olumn' in a 'in&l% out%r :oin
#r%diat% mu't 3%lon& to th% 'am% ta3l%C" Thi'
m%an') 8or %!am#l%) that th% 8ollo0in& 'tat%m%nt i'
ill%&al :L
E>P"E>PNOGIC = DEPT"DEPTNOGIC L out%r :oin olumn' 8rom
t0o ta3l%'
Al'o) i8 a olumn in a #r%diat% i'
an out%r :oin olumn) th%n all olumn' 8rom
th% 'am% ta3l% mu't 3% out%r :oin olumn' in that
#r%diat%" Thi' m%an') 8or %!am#l%) that th%
8ollo0in& 'tat%m%nt i' ill%&al :L
E>P"SAL I E>P"CO>>GIC = SALGRADE"DIGD L mi!%d olumn' 8rom
on% ta3l%
In a #r%diat%) th% ta3l% r%8%r%n%d 0ith a
GIC i' dir%tl. 9out%r :oin%d9 to all oth%r ta3l%'
in th% #r%diat%" It i' indir%tl. 9out%r :oin%d9 to
an. ta3l%' to 0hih th%'% oth%r ta3l%' ar%
th%m'%l2%' 9out%r :oin%d9" A #r%diat% ma. not 3%
dir%tl. or indir%tl. 9out%r :oin%d9 to it'%l8" Thi'
m%an') 8or %!am#l%) that th% 8ollo0in& om3ination
o8 #r%diat%' i' ill%&al :L
E>P"E>PNOGIC = PERS"E>PNO
AND PERS"DEPTNOGIC = DEPT"DEPTNO
AND DEPT"5OAGIC = E>P"5OA L irular out%r
:oin r%lation'hi#
1 OUTER 5OIN EPECUTION
For a &i2%n ta3l%) T) th%r% ma. 3% 3oth out%r :oin and
nonLout%r :oin #r%diat%'" E!%ution our' G on%#tuall. C a'
8ollo0' :L
*" Th% r%'ult o8 :oinin& all ta3l%' m%ntion%d in ta3l% T9'
out%r :oin #r%diat%' i' 8orm%d G 3. r%ur'i2% a##liation
o8 thi' al&orithm C"
," For %ah ro0 o8 th% r%'ult) a '%t o8 om#o'it% ro0' i'
8orm%d) %ah on'i'tin& o8 th% ori&inal ro0 in th%
r%'ult :oin%d to a ro0 in ta3l% T 8or 0hih th% om#o'it%
ro0 'ati'8i%' all o8 ta3l% T9' out%r :oin #r%diat%'"
1" I8 a '%t o8 om#o'it% ro0' i' th% null '%t) a om#o'it%
ro0 i' r%at%d on'i'tin& o8 th% ori&inal ro0 in th%
r%'ult :oin%d to a ro0 'imilar to tho'% in ta3l% T) 3ut
0ith all 2alu%' '%t to null"
4" Ro0' that do not #a'' th% nonLout%r :oin #r%diat%'
ar% r%mo2%d"
Thi' ma. 3% 'ummari'%d a' 8ollo0'" Out%r :oin
#r%diat%' G tho'% 0ith GIC a8t%r a olumn o8 ta3l% T C) ar%
%2aluat%d AEFORE ta3l% T i' au&m%nt%d 0ith a null ro0" Th% null
ro0 i' add%d onl. i8 th%r% ar% NO ro0' in ta3l% T that 'ati'8.
th% out%r :oin #r%diat%'" NonLout%r :oin #r%diat%' ar%
%2aluat%d AFTER ta3l% T i' au&m%nt%d 0ith a null ro0 Gi8 n%%d%dC
4 OUTER 5OIN L RECO>>ENDATIONS
C%rtain t.#%' o8 out%r :oin' in om#liat%d lo&ial
%!#r%''ion' ma. not 3% 0%ll 8orm%d" In &%n%ral) out%r :oin
olumn' in #r%diat%' that ar% 3ranh%' o8 an OR 'hould 3%
a2oid%d" Inon'i't%ni%' 3%t0%%n th% 3ranh%' o8 th%
OR an
r%'ult in an am3i&uou' ?u%r.) and thi' ma. not 3% d%t%t%d" It
i' 3%'t to on8in% out%r :oin olumn' to th% to# l%2%l o8 th%
90h%r%9 lau'%) or to n%'t%d AND9' onl."
6 OUTER 5OIN L ILLUSTRATIVE EPA>PLES
6"* Sim#l% Out%r 5oin
SELECT ENA>E) LOC
FRO> DEPT) E>P
@DERE DEPT"DEPTNO = E>P"DEPTNOGIC
Th% #r%diat% i' %2aluat%d AEFORE null au&m%ntation" I8
th%r% i' a DEPT ro0 8or 0hih th%r% ar% no E>P ro0') th%n a null
E>P ro0 i' onat%nat%d to th% DEPT ro0"
6", Out%r 5oin @ith Sim#l% Po'tL5oin Pr%diat%'
SELECT ENA>E) LOC
FRO> DEPT) E>P
@DERE DEPT"DEPTNO = E>P"DEPTNOGIC
AND E>P"DEPTNO IS NULL
Th% '%ond 'im#l% #r%diat% i' %2aluat%d AFTER
null
au&m%ntation) 'in% th%r% i' no GIC) r%mo2in& ro0' 0hih 0%r%
not th% r%'ult o8 null au&m%ntation and h%n% l%a2in& onl. DEPT
ro0' 8or 0hih th%r% 0a' no orr%'#ondin& E>P ro0"
6"1 Out%r 5oin @ith Additional Pr%L5oin Pr%diat%'
SELECT ENA>E) LOC
FRO> DEPT) E>P
@DERE DEPT"DEPTNO = E>P"DEPTNOGIC
AND 9CLER/9 = E>P"5OAGIC
AND E>P"DEPTNO IS NULL
Th% #r%diat% on E>P"5OA i' %2aluat%d at th% 'am% tim%
a' th% on% on E>P"DEPTNO L 3%8or% null au&m%ntation" A' a
r%'ult) a null ro0 i' au&m%nt%d to an. DEPT ro0 8or 0hih th%r%
ar% no orr%'#ondin& l%r$'9' in th% E>P ta3l%" Th%r%8or%) thi'
?u%r. di'#la.' d%#artm%nt' ontainin& no l%r$'"
Not% that it th% GIC 0%r% omitt%d 8rom th% E>P"5OA
#r%diat%) no ro0' 0ould 3% r%turn%d" In thi' a'%) 3oth th%
E>P"5OA and E>P"DEPTNO IS NULL #r%diat%' ar% %2aluat%d
AFTER
th% out%r :oin) and th%r% an 3% no ro0' 8or 0hih 3oth ar%
tru%"
APPENDIP E
Th% T%n ommandm%nt' 8or 8a't Qu%ri%'
TDOU SDALL ACCIDENTLE NOT DISAALE TDE USE OF INDEPES AE
>ODIFEING A COLU>N @ITDIN TDE @DERE CLAUSE
TDOU SDALL PUT TDE TAALE TDAT RETURNS TDE FE@EST
RO@S LAST IN TDE FRO> LIST OF TDE QUERE"
TDOU @ILL INVESTIGATE RE@ORDING TDE QUERE IN
SO>E OTDER @AE"
TDOU SDALL USE TDE EPISTS OPERATOR @DENEVER POSSIALE"
TDOU SDALL NOT AS/ TDE /ERNEL FOR >ORE TDAN TDOU
@ANTEST"
TDOU SDALL NOT FORCE REPARSING OF A QUERE @DEN
ONLE CDANGING AIND VARIAALES
TDOU SDALL /NO@ TDE DATA VOLU>ETRICS AND USE
REALISTIC TEST DATA"
TDOU SDALL USE TAALE ALIASES IN TDE QUERIES
TDOU SDALL NOT USE TDE <= UNLESS AASOLUTELE NECESSARE
TDOU SDALL USE TDE TRACE FACILITE TO >ONITOR
EOUR QUERIES
APPENDIP F
EPPLAIN Failit.
>OTIVATION
Th%r% i' a n%%d 8or u'%r' to 3% a3l% to d%t%rmin% th% 't%#' th%
'.'t%m
ta$%' in #%r8ormin& 2ariou' o#%ration' on a data3a'%" Th% EPPLAIN
8ailit.
#ro2id%' u'%r' 0ith a on2%ni%nt m%hani'm 8or &%ttin& thi' in8ormation"
Th% 8ailit. 'tor%' thi' in8ormation in a 'tandard data3a'% ta3l% that
an
3% mani#ulat%d 0ith 'tandard SQL 'tat%m%nt'"
SENTAP
Th% 8ollo0in& '.nta! i' 3a'%d on th% '.nta! u'%d 3. DA, 8or th%ir
EPPLAIN 8ailit.:
EPPLAIN PLAN TSET STATE>ENTKID T=U M'trin& lit%ralFU
TINTO Mta3l%Knam%FU
FOR M'?lK'tat%m%ntF
0h%r%
STATE>ENTKID L a uni?u% o#tional id%nti8i%r 8or th% 'tat%m%ntH
INTO L allo0' u'%r to 'a2% th% r%'ult' o8 th% anal.'i' in
th% '#%i8i%d ta3l%" Th% ta3l% mu't on8orm to th% 8ormat
8or th% ta3l% u'%d to 'tor% th% anal.'i' G '%% TAALE FOR>ATS
'%tion 8or a d%'ri#tion o8 th% ta3l% 8ormat C" I8 thi'
lau'% i' not '#%i8i%d) th% '.'t%m 0ill th%n att%m#t to 'tor%
th% in8ormation in a ta3l% nam%d Mu'%rKidF"PLANKTAALE " I8
th% %!#liit or im#liit ta3l% do%' not %!i't th% EPPLAIN
ommand 0ill 8ail"
M'?l 'tat%m%ntF L an in'%rt) d%l%t%) u#dat%) or ?u%r. 'tat%m%ntH
TAALE FOR>ATS
Cor% Ta3l% Format
Th% or% ta3l% u'%d to r%#r%'%nt th% #lan in8ormation on'i't' o8 th%
8ollo0in& 8i%ld':
STATE>ENTKID L An id%nti8i%r a''oiat%d 0ith th% 'tat%m%nt" I8 not '%t
3.
th% u'%r) th% id%nti8i%r 0ill 3% NULL" Not% that a u'%r ma.
id%nti8. a 'tat%m%nt 3. th% tim%'tam# 8i%ld"
TI>ESTA>P L Th% dat% and tim% 0h%n th% 'tat%m%nt 0a' anal.'%d"
RE>AR/S L An. omm%nt th% u'%r 0i'h%' to a''oiat% 0ith thi' 't%# o8
th% anal.'i'"
OPERATION L th% nam% o8 th% o#%ration 3%in& #%r8orm%d" Th% 8ollo0in&
ta3l%
#ro2id%' a li'tin& o8 th% o#%ration' d%'ri3%d 3. th% 8ailit."
O#%ration D%'ri#tion
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
AndLE?ual A r%tri%2al utili'in& int%r'%tion o8
ro0id' 8rom ind%! '%arh%'
Conn%t 3. A r%tri%2al that i' 3a'%d on a tr%% 0al$
Conat%nation A r%tri%2al 8rom a &rou# o8 ta3l%'" It i'
%''%ntiall. a UNION ALL o#%ration o8 th%
'our%'" U'%d 8or OR o#%ration'"
Countin& A nod% that i' u'%d to ount th% num3%r o8
ro0' r%turn%d 8rom a ta3l%" U'%d 8or ?u%ri%'
that u'% th% RO@NU> m%taLolumn"
Filt%r A r%'trition o8 th% ro0' r%turn%d 8rom a ta3l%
Fir't Ro0 A r%tri%2al o8 onl. th% 8ir't ro0
For U#dat% A r%tri%2al that i' u'%d 8or u#datin&
Ind%! A r%tri%2al 8rom an ind%!
Int%r'%tion A r%tri%2al o8 ro0' ommon to t0o ta3l%'
>%r&% 5oin A :oin utili'in& m%r&% 'an'
>inu' A r%tri%2al o8 ro0' in Sour% * ta3l% 3ut not in
Sour% , ta3l%
N%'t%d Loo#' A :oin utili'in& n%'t%d loo#'" Eah
2alu% in th%
8ir't 'u3nod% i' loo$%d u# in th% '%ond
'u3nod%"
Thi' i' o8t%n u'%d 0h%n on% ta3l% in a :oin i'
ind%!%d and th% oth%r i' not"
Pro:%t A r%tri%2al o8 a 'u3'%t o8 olumn' 8rom a ta3l%
R%mot% A r%tri%2al 8rom a data3a'% oth%r than th%
urr%nt
data3a'%
S%?u%n% An o#%ration in2ol2in& a '%?u%n% ta3l%
Sort A r%tri%2al o8 ro0' ord%r%d on 'om% olumn or
&rou#
o8 olumn'
Ta3l% A r%tri%2al 8rom a 3a'% ta3l%
Union A r%tri%2al o8 uni?u% ro0' 8rom t0o ta3l%'
Vi%0 A r%tri%2al 8rom a 2irtual ta3l%
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
Not% that th% o#%ration 'ho0n 0h%n ountin& th% num3%r o8 ro0'
r%turn%d 3. a ?u%r. Gi"%" '%l%t ountGJCC i' SORT" Thi' i' du% to
th% 0a. that COUNT i' im#l%m%nt%d int%rnall." Th% ta3l% 0ill not
r%all. 3% 'ort%d"
OPTIONS L an o#tion that modi8i%' th% o#%ration) %"&")
OUTER o#tion on :oin o#%ration') rational% 8or 'ortin&) t.#%
o8 ind%! 'an) t.#% o8 8ilt%r) %t" Th% 8ollo0in& ta3l%
GUIDELINES AND GOOD PRACTICE FOR DEVELOPING SQL Pa&% 4*
GUIDELINES AND GOOD PRACTICE FOR DEVELOPING SQL Pa&% 4,
AUTDOR : Tina London
DATE : Au&u't () *++,
#ro2id%' a li't o8 th% o#tion' 8or th% o#%ration' that ha2%
o#tion'"
OPERATION OPTIONS DESCRIPTION
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
Ind%! UNIQUE /EE Uni?u% $%. loo$u# on ind%!
RANGE Ind%! ran&% 'an
>%r&% 5oin OUTER 5oin i' an out%r :oin
N%'t%d Loo#' OUTER 5oin i' an out%r :oin
Sort DISTINCT Sort i' to #rodu% di'tint
2alu%'
GROUP AE Sort i' 8or &rou#in& o#%ration
5OIN Sort i' 8or m%r&% :oin
ORDER AE Sort i' 8or ord%r 3.
Ta3l% AE RO@ID Ta3l% 'an i' 3. ro0id
FULL S%?u%ntial ta3l% 'an
CLUSTER Ta3l% 'an 3. lu't%r $%.
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
OA5ECTKNODE L th% nam% o8 th% nod% that o0n' th% data3a'% o3:%t"
OA5ECTKO@NER L th% nam% o8 th% 'h%ma th% o0n' th% data3a'% o3:%t"
OA5ECTKNA>E L th% nam% o8 th% data3a'% o3:%t"
OA5ECTKTEPE L a modi8i%r that #ro2id%' d%'ri#ti2% in8ormation a3out
th% data3a'% o3:%t) %"&") NONLUNIQUE 8or ind%!%') %t"
OA5ECTKINSTANCE L a num3%r orr%'#ondin& to th% ordinal #o'ition o8 th%
o3:%t a' it a##%ar' in th% ori&inal ?u%r." Th% num3%rin& #ro%%d'
8rom l%8t to ri&ht) out%r to inn%r 0ith r%'#%t to th% ori&inal
?u%r. t%!t" Not% that at thi' l%2%l) 2i%0 %!#an'ion 0ill r%'ult in
rath%r int%r%'tin& o3:%t in'tan% num3%r'" @% 0ill 3% addr%''in&
thi'
i''u% 8ull. in 8utur% r%l%a'%'"
SEARCDKCOLU>NS L th% num3%r o8 l%adin& olumn' u'%d 0h%n '%arhin& an
ind%!"
ID L a num3%r a''i&n%d to thi' o#%ration in th% tr%%"
Corr%'#ond' to a #r%ord%r tra2%r'al o8 th% ro0 'our% tr%%"
PARENTKID L th% num3%r a''i&n%d to th% #r%2iou' o#%ration that
r%%i2%' in8ormation 8rom thi' o#%ration" Thi' 8i%ld
om3in%d 0ith th%
ID 8i%ld allo0' u'%r' to do a tr%%0al$ o8 th% '#%i8i%d
#lan 0ith th% CONNECT AE 'tat%m%nt"
POSITION L th% #o'ition thi' data3a'% o3:%t ou#i%' 8or th% #r%2iou'
o#%ration"
OTDER L oth%r in8ormation that i' '#%i8i to th% ro0 'our% that a u'%r
ma. 8ind u'%8ul" For %!am#l%) th% '%l%t 'tat%m%nt to a r%mot%
nod%) %t"
Sam#l% Ta3l% D%8inition
r%at% ta3l% PLANKTAALE G
'tat%m%ntKid harG1-C)
tim%'tam# dat%)
r%mar$' harG;-C)
o#%ration harG1-C)
o#tion' harG1-C)
o3:%tKnod% harG1-C)
o3:%tKo0n%r harG1-C)
o3:%tKnam% harG1-C)
o3:%tKin'tan% num%ri)
o3:%tKt.#% harG1-C)
'%arhKolumn' num%ri)
id num%ri)
#ar%ntKid num%ri)
#o'ition num%ri)
oth%r lon&CH
An SQL 'ri#t to r%at% thi' ta3l% r%'id%' in 8il% !#lain#l"'?l in th%
'am%
dir%tor. ontainin& th% 8il% atalo&"'?l" Thi' ta3l% mu't r%'id% in
th%
urr%nt 'h%ma unl%'' .ou u'% th% o#tional INTO lau'% o8 th% EPPLAIN
ommand"
EPA>PLES
Su##o'% 0% i''u% th% 8ollo0in& 'tat%m%nt':
EPPLAIN PLAN
SET STATE>ENTKID = 9?u%r.*9
INTO QUEREKPLANS
FOR SELECT J FRO> T*)T,)T1 @DERE T*"F* = T,"F* AND T,"F, =
T1"F,H
SELECT OPERATION) OPTIONS) OA5ECTKNA>E) ID)
PARENTKID) POSITION
FRO> QUEREKPLANS
@DERE STATE>ENTKID = 9?u%r.*9
ORDER AE IDH
Th% 8ollo0in& out#ut 0ould 3% r%at%d:
OPERATION OPTIONS OA5ECTKNA>E ID PARENTKID
POSITION
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LL
>ERGE 5OIN *
>ERGE 5OIN , * *
SORT 5OIN 1 , *
TAALE ACCESS FULL T* 4 1 *
SORT 5OIN 6 , ,
TAALE ACCESS FULL T, 7 6 *
SORT 5OIN ( * *
TAALE ACCESS FULL T1 ; ( *
; RECORDS '%l%t%d
Su##o'% that an ind%! i' r%at%d on 8i%ld F* on ta3l% T* and th%
8ollo0in& 'tat%m%nt' ar% i''u%d:
EPPLAIN PLAN
SET STATE>ENTKID = 9?u%r.,9
INTO QUEREKPLANS
FOR SELECT J FRO> T* @DERE F* F *H
SELECT OPERATION) OPTIONS) OA5ECTKNA>E) OA5ECTKTEPE)
SEARCDKCOLU>NS)
ID) PREVIOUSKID
FRO> QUEREKPLANS @DERE
STATE>ENTKID=9?u%r.,9
ORDER AE IDH
Th% 8ollo0in& out#ut i' #rodu%d:
OPERATION OPTIONS OA5ECTKNA>E OA5ECTKTEPE SEARCDKCOLU>NS ID
POSITION
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLL
TAALE SCAN AE RO@ID T* *
INDEP SCAN RANGE IT* NONLUNIQUE * ,
*
, RECORDS '%l%t%d
@ith th% 'am% ondition' a' 3%8or%) 'u##o'% 0% i''u% th% 8ollo0in&
0hih d%mon'trat%' an ind%! onl. r%tri%2al:
EPPLAIN PLAN
SET STATE>ENTKID = 9?u%r.19
INTO QUEREKPLANS
FOR SELECT F* FRO> T* @DERE F* F *H
SELECT OPERATION) OPTIONS) OA5ECTKNA>E) OA5ECTKTEPE)
SEARCDKCOLU>NS)
ID
FRO> QUEREKPLANS @DERE
STATE>ENTKID=9?u%r.19H
Th% 8ollo0in& out#ut i' #rodu%d:
OPERATION OPTIONS OA5ECTKNA>E OA5ECTKTEPE SEARCDKCOLU>NS ID
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LL
INDEP SCAN RANGE IT* NONLUNIQUE *
* RECORDS '%l%t%d
Th% n%!t %!am#l% illu'trat%' th% out#ut i8 a &rou#in& o#%ration i'
'#%i8i%d in th% 'tat%m%nt:
EPPLAIN PLAN
SET STATE>ENTKID = 9?u%r.49
INTO QUEREKPLANS
FOR SELECT AVGGF*C)F, FRO> T* GROUP AE F,H
SELECT OPERATION) OPTIONS) OA5ECTKNA>E) ID)
PARENTKID
FRO> QUEREKPLANS @DERE STATE>ENTKID = 9?u%r.49
ORDER AE IDH
OPERATION OPTIONS OA5ECTKNA>E ID PARENTKID
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
SORT GROUP AE *
TAALE SCAN FULL T* , *
, RECORDS '%l%t%d
Th% n%!t %!am#l% illu'trat%' th% ou#tut i8 DISTINCT i' '#%i8i%d in
th%
'tat%m%nt:
EPPLAIN PLAN
SET STATE>ENTKID = 9?u%r.69
INTO QUEREKPLANS
FOR SELECT DISTINCT F* FRO> T*H
SELECT OPERATION) OPTIONS) OA5ECTKNA>E) ID)
PREVIOUSKID
FRO> QUEREKPLANS @DERE STATE>ENTKID = 9?u%r.69
ORDER AE IDH
OPERATION OPTIONS OA5ECTKNA>E ID PREVIOUSKID
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
SORT DISTINCT *
TAALE SCAN FULL T* , *
, RECORDS '%l%t%d
Th% n%!t %!am#l% illu'trat%' th% out#ut i8 a 'u3?u%r. i' '#%i8i%d
in
th% 'tat%m%nt:
EPPLAIN PLAN
SET STATE>ENTKID = 9?u%r.79
INTO QUEREKPLANS
FOR SELECT J FRO> T* @DERE F* M G SELECT F, FRO> T, @DERE F*=1CH
SELECT OPERATION) OPTIONS) OA5ECTKNA>E) ID)
PARENTKID) POSITION
FRO> QUEREKPLANS @DERE STATE>ENTKID = 9?u%r.79
ORDER AE IDH
OPERATION OPTIONS OA5ECTKNA>E ID PARENTKID
POSITION
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
L
FILTER OUT *
TAALE SCAN FULL T* , * *
TAALE SCAN FULL T, 1 * ,
1 RECORDS '%l%t%d
Th% 8inal %!am#l% di'#la.' a om#l%! ?u%r. 0ho'% out#ut i' '%nt to th%
d%8ault #lan ta3l%" G It i' a''um%d that thi' ta3l% ha' 3%%n r%at%d
3%8or%
i''uin& th% 'tat%m%nt"C
EPPLAIN PLAN
SET STATE>ENTKID = 9?u%r.(9
FOR SELECT J FRO> T*)T, @DERE T*"F* = T,"F* UNION
SELECT J FRO> T,)T1 @DERE T,"F* = T1"F*H
SELECT OPERATION) OPTIONS) OA5ECTKNA>E) ID) PARENTKID) POSITION
FRO> PLANKTAALE @DERE STATE>ENTKID = 9?u%r.(9
ORDER AE IDH
Th% 8ollo0in& out#ut i' #rodu%d:
OPERATION OPTIONS OA5ECTKNA>E ID PARENTKID
POSITION
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LL
PRO5ECTION *
UNION , * *
SORT DISTINCT 1 , *
NEST LOOP 4 1 *
TAALE SCAN AE RO@ID T* 6 4 *
INDEP SCAN RANGE IT* 7 6 *
TAALE SCAN FULL T, ( 4 ,
SORT DISTINCT ; , ,
>ERGE 5OIN + ; *
SORT 5OIN *- + *
TAALE SCAN FULL T, ** *- *
SORT 5OIN *, + ,
TAALE SCAN FULL T1 *1 *, *
*1 RECORDS '%l%t%d
Th% 8ollo0in& %!am#l% i' 3a'%d on th% #r%2iou' ?u%r." It illu'trat%'
th%
u'% o8 th% tr%%0al$in& a#a3ilit. in Oral%9' 2%r'ion o8 SQL"
SELECT LPADG9 9),JLEVELCNNOPERATION)OPTIONS) OA5ECTKNA>E
FRO> PLANKTAALE @DERE STATE>ENTKID=9?u%r.(9
CONNECT AE PRIOR ID = PARENTKID
and STATE>ENTKID = 9?u%r.(9
START @ITD ID = *
and STATE>ENTKID = 9?u%r.(9
ORDER AE IDH
LPADG9 9),JLEVELCNNOPERATION
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLL
OPTIONS OA5ECTKNA>E
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
PRO5ECTION
UNION
SORT
DISTINCT
NEST LOOP
TAALE SCAN
AE RO@ID T*
INDEP SCAN
RANGE IT*
TAALE SCAN
FULL T,
SORT
DISTINCT
>ERGE 5OIN
SORT
5OIN
TAALE SCAN
FULL T,
SORT
5OIN
TAALE SCAN
FULL T1
*1 RECORDS '%l%t%d