Documente Academic
Documente Profesional
Documente Cultură
Presents
SQL> @test1
3 ;
COUNT(DATA_COL)
---------------
10000
Selectivity-Error Examples
SQL> @exq8 test2
1 SELECT count(Data_Col) FROM DTow_Talk_Child
2 WHERE Date_Col >= TO_DATE('2005/01/01','YYYY/MM/DD')-10
3* AND Code_Col = 'OP'
.1 SELECT STATEMENT c=7, R=1
..2 SORT AGGREGATE c=_, R=1
...3 TABLE ACCESS BY INDEX ROWID 1*DTOW_TALK_CHILD c=7, R=46
....4 INDEX RANGE SCAN DTOW_TALK_CHILD_CODE_COL: CODE_COL c=1,
R=4600
SQL> @test2
4 ;
COUNT(DATA_COL)
---------------
3700
Selectivity-Error Examples
SQL> @exq8 test3
1 SELECT count(Data_Col) FROM DTow_Talk_Child
2 WHERE Date_Col <= TO_DATE('2005/01/01','YYYY/MM/DD')-90
3* AND Code_Col = 'OP'
.1 SELECT STATEMENT c=7, R=1
..2 SORT AGGREGATE c=_, R=1
...3 TABLE ACCESS BY INDEX ROWID 1*DTOW_TALK_CHILD c=7, R=4195
....4 INDEX RANGE SCAN DTOW_TALK_CHILD_CODE_COL: CODE_COL c=1,
R=4600
SQL> @test3
4 ;
COUNT(DATA_COL)
---------------
110
Unfair Advantages Humans Enjoy
LIO PIO
---------------------------- ----------------------------
Logical Reads = 18484 Physical Reads = 0
Measurement Example
SQL> @exq8 test6
1 select count(*) from (SELECT /*+ first_rows */ …rownum rn
8 FROM …--<just like test4 SQL>
16* AND TC.Description='VERY_RARE')
.1 SELECT STATEMENT c=300252, R=1
..2 SORT AGGREGATE c=_, R=1
...3 VIEW 1* c=300252, R=333333
....4 COUNT c=_, R=_
.....5 TABLE ACCESS BY INDEX ROWID 2*DTOW_TALK_CHILD c=3, R=3
......6 NESTED LOOPS c=300252, R=333333
.......7 NESTED LOOPS c=252, R=100000
........8 MERGE JOIN CARTESIAN c=252, R=100000
.........9 TABLE ACCESS BY INDEX ROWID 4*DTOW_TYPE c=2, R=1
..........10 INDEX RANGE SCAN DTOW_TYPE_DESCRIPTION: DESCRIPTION c=1, R=1
.........9 BUFFER SORT c=250, R=100000
..........10 TABLE ACCESS FULL 3*DTOW_TALK_PARENT1 c=250, R=100000
........8 INDEX UNIQUE SCAN DTOW_TYPE_UNQ1: type_id c=_, R=1
.......7 INDEX RANGE SCAN DTOW_TALK_CHILD_FKEY1_ID: fkey1_id c=2, R=10
Measurement Example
SQL> @mysid9
COUNT(*)
----------
1000
Elapsed: 00:00:03.60
SQL> @reads9
LIO PIO
---------------------------- ----------------------------
Logical Reads = 220516 Physical Reads = 0
Measurement Example
SQL> @exq8 test7
1 SELECT /*+ leading(TC) use_nl(C P) index(C DTOW_TALK_CHILD_TYPE_ID)
2 index(P DTOW_TALK_PARENT1_UNQ1) */
… --<Otherwise just like test4.sql
15* and TC.Description='VERY_RARE'
.1 SELECT STATEMENT c=340711, R=1
..2 SORT AGGREGATE c=_, R=1
...3 HASH JOIN c=340711, R=333333
....4 NESTED LOOPS c=340470, R=333333
.....5 NESTED LOOPS c=7137, R=333333
......6 TABLE ACCESS BY INDEX ROWID 3*DTOW_TYPE c=2, R=1
.......7 INDEX RANGE SCAN DTOW_TYPE_DESCRIPTION: DESCRIPTION
c=1, R=1
......6 TABLE ACCESS BY INDEX ROWID 1*DTOW_TALK_CHILD c=7135,
R=333333
.......7 INDEX RANGE SCAN DTOW_TALK_CHILD_TYPE_ID: type_id
c=843, R=333333
.....5 TABLE ACCESS BY INDEX ROWID 2*DTOW_TALK_PARENT1 c=1, R=1
......6 INDEX UNIQUE SCAN DTOW_TALK_PARENT1_UNQ1: pkey_id c=_,
R=1
....4 TABLE ACCESS FULL 4*DTOW_TYPE c=2, R=3
Measurement Example
SQL> @mysid9
LIO PIO
---------------------------- ----------------------------
Logical Reads = 3012 Physical Reads = 0
Unfair Advantages Humans Enjoy
LIO PIO
---------------------------- ----------------------------
Logical Reads = 14282 Physical Reads = 0
Corner-Case Example
LIO PIO
---------------------------- ----------------------------
Logical Reads = 9 Physical Reads = 0
Unfair Advantages Humans Enjoy
•Tune fast.
•Tune at runtime, without executing SQL
against application data.
•Take each SQL spec as gospel.
•Use only what can be deduced or assumed
from dictionary statistics.
•Use the database as-is.
Choices Unavailable to the CBO
YES!
Objections to Human Tuning, Addressed