2004. 6. 신민수

212
2004. 6. 신신신 ORACLE ORACLE 신신 신신 TUNING & SQL TUNING & SQL 신신 신신

Upload: sutton

Post on 04-Jan-2016

187 views

Category:

Documents


3 download

DESCRIPTION

ORACLE 강좌 TUNING & SQL 활용. 2004. 6. 신민수. 튜닝 & SQL 활용 1 튜닝 ? 부분범위처리 인덱스 조인. 들어가기 전에 …. 참고서적 : 대용량 데이타베이스 강좌 참고문서 : 엔코아 교육자료 , 기타 어디선가 받아놓았던 자료들 … ** SQL 문장 튜닝 공부하면서 정리해놓은 문서입니다 . 완성된것은 아니나 필요하신 분들에게 도움이 되었으면 합니다. 튜닝 ?. - PowerPoint PPT Presentation

TRANSCRIPT

PowerPoint - * -
2004. 6.
- * -
& SQL 1
- * -

: , …
** SQL . .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
?
, WHERE, , SQL SQL .
.
.
SQL Tuning.
Oracle , EXPLAIN PLAN .
Tuning .
, , Tuning .
Toad DBA !
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -


95% 2.5
10
3
GUI field field 1
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
.
SID : .
: .
:I/O .
:, , , .
.
: , .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

SQL

Optimizer
- * -

(Constraint)

, ?
(Peak Time)
( )
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

Join .
LONG .
.
Join SQL .
SUM SQL .
MAX MIN SQL .
.
Full Table Scan SQL
1. (One to One)
 
. "" .
. "" Join .
 2. (One to Many)
 
. -(Parent-Children) . . .
3. (Many to Mant)
. . . 4 .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Autotrace & EXPLAIN PLAN
SET AUTOTRACE TRACEONLY EXP(SELECT PLAN ) : SET AUTOTRACE ON
PLAN_TABLE SQL
explain plan set statement_id = 'a1' for SQL> def id=a1 SQL> @plan
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
explain plan
Select * from wcm_content;
decode(id,0,'Cost Estimate:'||decode(position,'0',
'N/A',position), null)||''||options||
CONNECT BY PRIOR ID=PARENT_ID AND STATEMENT_ID=&1
CREATE TABLE PLAN_TABLE (
STATEMENT_ID VARCHAR2 (30),
- * -

, Return , Action .
-
- ,
- (Order by .)

SELECT ENAME, SAL
-- order by .
SELECT ENAME, SAL
-- ename .
. 4 . 4 .

!!
App , . .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

Order by( )
Query ( )
.
. . .
(Partial Range Scan)
=================================================================================

, .

. .
ACCESS
DATA PERFORMANCE ,
INDEX CLUSTER SORT
MAX
EXISTS
ROWNUM
Stored Function
- * -

2




1




2




1



Row Array Size (stop key)
“Array Size” Fetch
FetchOpen Record .
(open)
==============================================================================
TKPROF
TKPROF SQL SQL . . SQL .
Parse( ) : SQL . , .
EXECUTE() : insert, update, delete .
Fetch() : . select .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -


SELECT * FROM PRODUCT WHERE YMD = '951023' AND ITEM LIKE 'AB%' ORDER BY YMD, ITEM

1







INDEX(YMD)
TABLE
SORT
SELECT * FROM PRODUCT WHERE YMD = '951023' AND ITEM LIKE 'AB%';





SORT ITEM FULL SCAN .

www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
(SORT )
42000 SORT ORDER BY
42001 INDEX RANGE SCAN ORD_ORDDEPT
SQL> SELECT ORDDATE, CUSTNO
SQL> SELECT --+ INDEX_DESC(A orddate)
21201 INDEX RANGE SCAN ORD_ORDDATE
SQL> SELECT ORDDATE, CUSTNO
SQL> SELECT --+ INDEX_DESC(A orddate)
ORDDATE <= ‘991231’

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

================================================
(SELECT /*+ INDEX_DESC(C UPDATE_DATE_IDX) */ ROWNUM NUM, C.*, U.NAME USER_NAME, CA.FULL_PATH FULL_PATH, S.NAME SITE_NAME
FROM WCM_CONTENT C, WCM_USER U, WCM_CATEGORY CA, WCM_SITE S
WHERE c.content_id>0 AND C.UPDATE_DATE > '0' AND C.dbsts='A'
AND C.UPDATE_USER_ID=U.USER_ID
AND C.CATEGORY_ID=CA.CATEGORY_ID
WHERE NUM<=11 AND NUM>0 AND ROWNUM<=11
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
(INDEX )


SELECT DEPT, SUM(QTY) FROM PRODUCT WHERE DEPT LIKE '12%' GROUP BY DEPT;

TABLE
GROU
P
B
Y
SELECT DEPT, SUM(QTY). FROM PRODUCT WHERE DEPT LIKE '12%' GROUP BY DEPT;

I/O() I/O. .
.

, .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
(Max )
SELECT /*+ INDEX_DESC( A INDEX1) */
AND ROWNUM = 1;



10 … 1 .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
SQL> SELECT MAX(hiredate)
SELECT MAX(empno) + 1
FROM EMPTEST2 A
WHERE DEPTNO = 10
AND ROWNUM = 1;
ord_date < '99991231'
??
… ..
SELECT . .
ROWID .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
SQL
SQL> SELECT STATUS, COUNT(*)
2.5 sec
2.53 sec
SQL> SELECT --+ INDEX_DESC(A dept_date)
AND ROWNUM = 1
36631 INDEX RANGE SCAN ITEM_STATUS
SQL> SELECT TYPE, COUNT(*)
! ( …) -> !!

(ITEM+STATUS)
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
(EXISTS)
WHERE EXISTS
(SELECT 'X'
FROM ITEM_TAB

.
, ... LOOP . . .
1:M . .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
(ROWNUM)


COUNT
COUNT 1 ROWNUM .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

stopkey .

- * -

FROM EMPTEST2
-----------------------------------------------------------------------------------------------------------------------------------------
Union all .
Union , union all .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

rowid .
.

(CREATE INDEX~)
.
ACCESS : Sequential Access(=Full Table Scan), Random Access(= RowID Direct Aceess)
.

2) ( )
3) NULL
4)2 WHERE JOIN condition //COMPOSITE INDEX
5) SELECT ROWS ROWS 10~15%
INDEX
2)WHERE , JOIN condition
3) SELECT ROWS ROWS 10~15%
4) UPDATE (DML)
============================
INDEX
COMPOSITE(CONCATENATED) INDEX ~ INDEX (16 )
INDEX
UNIQUE INDEX ~ CHECK, ( , .)
NON-UNIQUE INDEX ~ .
- * -

SELECT empno, ename, job FROM emp WHERE job between '' and ''
SORT
TABLE (EMP)
INDEX (JOB)
INDEX-KEY ROWID
0000A95B.0002.0001
0000A95B.0005.0001
0000E62E.0009.0001
0000E9BE.0002.0001
000062BE.0003.0001
000093A6.0005.0001
000093B2.000B.0001
000069C5.0001.0001
0000E9BE.0002.0001
0000E9BE.0005.0001
0000E9BE.000B.0001
000062BE.0001.0001
BTREE .
. .
ROWID . ROWID
7.3 8 ROWID .
() ?(ROWID=++)
I/O .

ROWID . . SELECT ..
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

- * -

- * -

(SQL WHERE)
ORDER BY, GROUP BY, UNION, DISTINCT(TEMP TABLESPACE)

( )
(Foreign Key)
----------------------------------------------------------------------------------------------------------
where e.deptno = d.deptno and e.deptno = 10;
.
key .
,
Inex cluster :
hash cluster :
- Table
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
! ??
. .

cluster key .
CLUSTER
I/O Table Index .
- Cluster
Insert , Cluster Table Table Full Scan , Cluster Table .
HASH CLUSTER
.
Table .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -



SELECT ROW
   1) 4% ( 8 )
   2) 10~15% ( 7 )
INDEX ?
1) RANDOM ACCESS FULL TABLE SCAN .
2) DML TRANSACTION DML OVERHEAD
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

(index tablespace)
I/O I/O (: 10~15%)

,
4
,, .
.(rank )

- * -

(Random Access)
/
Join
Nested Join (?)
//
.
Random access rowid
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

10~15% .
= 1/ * 100
(Selectivity)

Unique Index 1.00
1 .
(sex) ?? 50 %
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
()


()
1
- * -


1,000 block


INDEX
(FLD)
Hit Ratio
1000 1000 ( 15% ) (I/O 1000) .
I/O .( )
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

. (Index Merge)




,

www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

FULL- TABLE SCAN
BLOCK .
SELECT ROW .( )
INDEX SCAN
SELECT ROW .(10~15% )
FAST-FULL INDEXED SCAN
SELECT INDEX
INDEX .
FULL-TABLE SCAN FULL-TABLE SCAN .FULL-TABLE SCAN .
FULL-TABLE SCAN BLOCK I/O PARALLEL QUERY .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

(Rule Based )
2 1
3 Unique Key Primary Key Hash Cluster Key 1
4 Unique Key Primary Key 1
5
12
15
- * -
.( , )
SAL * 12 = 2000 SAL = 2000/12
NULL .(NULL )
( <>, NOT )
LIKE '%ABC%','%ABC' . 'AB%'.
WHERE 2 LIKE = .()
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
INDEX COLUMN
SELECT *
SUBSTR 100 .
DNAME LIKE ‘AC%’
Null
. . null .
Job, empno 2
- * -
INDEX COLUMN (external)
WHERE TO_CHAR(HIREDATE,'YYYYMMDD') = '19811203'
index index ABC .
.
sal * 12 .
.
1 Char .
.!!!
date yyyymmdd .
…SELECT * FROM EMPtest2
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
INDEX COLUMN (external)
SELECT *
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
SUPPRESSING()
90% .

SUPPRESSING.( ,.;)
WHERE EMPNO + 0 = 8978 --NUMBER
Suppressing RTRIM() !!!
Suppressing RTRIM() .
RTRIM , …
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
SUPPRESSING()
SELECT *
.
. ...
LIKE
.
.
STATUS .
. 9
. fullscan
CUST LIKE ‘AA%’ CUST =‘AA’ ??
SELECT * FROM EMP
WHERE ename = 'S%'
SELECT * FROM EMP
WHERE ename LIKE 'S%'
AND job LIKE 'M%‘ : .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
INDEX COLUMN (internal)

SELECT * FROM SAMPLET WHERE TO_CHAR(NUM) LIKE '9410%'
SELECT * FROM SAMPLET WHERE DAT = '01-JAN-94'
SELECT * FROM SAMPLET WHERE DAT = TO_DATE('01-JAN-94')
.
LIKE NUMBER TO_CHAR()
----------------------
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
INDEX COLUMN (internal)
SELECT * FROM SAMPLET
WHERE DAT = '01-JAN-94'
SELECT * FROM SAMPLET
WHERE DAT = TO_DATE('01-JAN-94')
CHAR =VARCHAR2 !
- * -
TABLE ACCESS FULL CHULGOT
INDEX RANGE SCAN CH_STATUS
FROM CHULGOT
INDEX RANGE SCAN CH_CFMDEPT
WHERE X.CUSTNO = Y.CUSTNO
AND X.ORDDEPT = Y.CFMDEPT
X .. CHULDATE .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
ORACLE – TUNING & SQL
INDEX COLUMN (internal)
Data Type Internal Conversion ( !!)
SELECT *
Emp hiredate emptest hiredate . !!!!
SELECT *
- * -
NOT Operator
FROM EMP a
WHERE a.empno > 0
AND NOT EXISTS ( SELECT * FROM EMP b WHERE b.empno = a.empno AND b.JOB = 'SALESMAN')
SELECT *
-- <> .
1. IN , EXISTS 1 .
2. Minus range scan . minus .
Minus .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
NULL, NOT NULL
NULL, NOT NULL .
NULL .
NULL .
SELECT *
SELECT *
SELECT *
-- IO .
--------------------------------
COMM 0 NULL .
NULL .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Optimizer
SELECT *
SELECT /*+ INDEX(EMP JOB_IDX) */ *

.
=======================
CBO :name app
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
RULE_based vs COST_based
optimizer_mode string CHOOSE
CHOOSE. CBO RBO . (Analyze cost -dept )
CBO ANALYZE .
ANALYZE CBO .
analyze choose cost . rbo sql .
Cost app sql .
(S-dept analyze / )

AND JOB LIKE 'SALE%' -- job ename .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
RULE_based vs COST_based
AND JOB LIKE 'SA%'
INDEX merge(and_equel)
analyze choose rule based .
cbo mssql cbo .
, cbo .
SELECT * FROM DEPT
WHERE dname='SALES‘ – full scan (analyze full scan.)
analyze index, /*+rule*/ .
SELECT /*+rule*/* from dept
- * -
!! ANALYZE
DBA .
cbo analyze … .
SELECT num_rows, blocks,empty_blocks AS empty,
avg_space,chain_cnt,avg_row_len
NUM_ROWS : table row
EMPTY : high-water mark block( )
AVG_SPACE : high-water mark free block
CHAIN_CNT : table chained or migrated row
AVG_ROW_LEN : row (row overhead )
------------------------------------------------------------------------------------------------------------------
index analyze usage
Index analyzed.
2 from index_stats;
16.4948454 ==> delete leaf row length index
10~20% index (rebuild) .
* Index Rebuild
Index altered.
Index analyzed.
2 from index_stats;
0 ==> rebuild 0 .
- rebuild option : parallel, rebuild nologging
.
- rebuild : reorg
- * -
!! ANALYZE
ANALYZE
TABLE
, , , Space , Chained Row ,
Distinct Value , , .
INDEX
Index Level, Level , Distinct Key ,
Leaf , Data , Clustering Factor, , .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Index Merge
INDEX (COL1)
COL1 rowid
COL2 rowid
- * -




- * -
-
SELECT ,
FROM
- * -
Index Merge( )
- * -
INDEX MERGE

2
.
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
INDEX MERGE ( )
MERGE ROW


INDEX(A)
INDEX(B)
TABLE
SINGLE INDEX

. 2 .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
INDEX MERGE ( )
SELECT 'X' FROM DUAL
- * -
( )
.

www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

SELECT * FROM WCM_CONTENT
WHERE category_id =104
AND update_date = '2004-01-16-10-51'
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=1 Bytes=150)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'WCM_CONTENT' (Cost=3 Card=1 Bytes=150)
2 1 AND-EQUAL
3 2 INDEX (RANGE SCAN) OF 'CATEGORY_ID_IDX' (NON-UNIQUE) (Cost=1 Card=1)
4 2 INDEX (RANGE SCAN) OF 'UPDATE_DATE_IDX' (NON-UNIQUE) (Cost=1 Card=1)
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=1 Bytes=150)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'WCM_CONTENT' (Cost=3 Card=1 Bytes=150)
2 1 INDEX (RANGE SCAN) OF 'CATEGORY_ID_UPDATE_DATE_IDX' (NON-UNIQUE) (Cost=2 Card=1)
– maxpace .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
INDEX MERGE ( - )
SELECT empno, hiredate
2 . select .
.
2 non-unique index 2 AND-EQUAL range scan .()
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'EMPTEST'
2 1 AND-EQUAL
===================
1 0 INDEX (RANGE SCAN) OF 'HIREDATE_SAL_IDX' (NON-UNIQUE)
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
INDEX MERGE INDEX
SELECT empno, hiredate
FROM EMPTEST A
WHERE hiredate = '19801217'
SELECT STATEMENT Optimizer=CHOOSE
AND-EQUAL
SELECT empno, hiredate
SELECT empno, hiredate
FROM EMPTEST2 A
WHERE hiredate = '19801217'
AND sal = 800
SELECT empno, hiredate
INDEX (RANGE SCAN) OF 'SAL_IDX' (NON-UNIQUE)
SELECT STATEMENT Optimizer=CHOOSE
INDEX (RANGE SCAN) OF 'HIREDATE_SAL_IDX'
Like
0 rows,
13 rows,
HIREDATE LIKE .
-------------------------
(10 ) sal 800 .
. Like ( )19801% .
hiredate in(9801,9802…) .( 31 )
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

WHERE hiredate LIKE '1987%'
in ‘’ . '19870419' '19870523' .
..
SELECT * FROM
WHERE hiredate LIKE '1987%' )
(like & in) .
COPY_YMD (PK)
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
equal ( )
SELECT empno, hiredate
FROM EMPTEST2 A
WHERE HIREDATE = '19870123'
AND SAL=1000
where .
equal .
.
= ?
= .
.
sort ?
! !!!
–(COL1, COL2)
SELECT empno, hiredate
FROM EMPTEST2 A

SELECT empno, hiredate
FROM EMPTEST2 A
WHERE ENAME ='' AND HIREDATE = '19870123' AND SAL=900 .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
equal
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
equal
COL2 COL1 ROWID
=
range scan .
= .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
SELECT empno, hiredate
FROM EMPTEST2 A
WHERE sal = 800
SELECT empno, hiredate
FROM EMPTEST2 A
WHERE sal = 800
INDEX RANGE SCAN INDEX1
INDEX RANGE SCAN INDEX1
INDEX RANGE SCAN INDEX1
Query ..
( AND-EQUAL, CONCATENATION)
Execution Plan
1 0 CONCATENATION
3 2 INDEX (RANGE SCAN) OF 'HIREDATE_SAL_IDX' (NON-UNIQUE)
4 1 TABLE ACCESS (BY INDEX ROWID) OF 'EMPTEST2'
5 4 INDEX (RANGE SCAN) OF 'HIREDATE_SAL_IDX' (NON-UNIQUE)
==================
. between .
BETWEEN ‘111’ AND ‘112’ 111 112 .
111 111.1 111.2 .
112 .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
index
Select * from tab1
A B C Rowid
1 20 30 10
2 30 40 11
2 40 45 47
2 50 46 54
2 60 49 58
2 70 51 61
INDEX (A+B+C)
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

'=' ?

. .
(Composite Index)
(=)
.
= ?
= .

www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -


( )
( .)


- * -
()
.



.
(PK)
.( GROUP GY )
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -



( )
( )



www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

( .)


(rowid direct !)
(CBO)

(OLTP) .

( )

full .
-------------------
OLTP , ,
CORP_ID 90% 10% .. FULL .
2 UNION ALL .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
index

SQL . .
C C .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
index ()
SQL> SELECT CHULNO, ORDNO, ITEM, CHULQTY
FROM CHULITEM
INDEX RANGE SCAN PK_CHULITEM
FROM CHULITEM
TABLE ACCESS BY ROWID CHULITEM
INDEX RANGE SCAN CI_LOT
FROM CHULITEM
TABLE ACCESS BY ROWID CHULITEM
INDEX RANGE SCAN PK_CHULITEM
LOT() LOT . 90%
, .
PK .( SUPPRESSING )
..
- * -
(78%)
4%
6%
7%
5%
A
B
C
D
E
COL1 = 'A'
COL1
KEY
(2200 row)
null full scan 2 union all…
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Index
I/O
REDO LOG ( NOLOGGING .)
ALTER INDEX index_name REBUILD
* Index Reorganization : index .
index analyze usage
Index analyzed.
2 from index_stats;
16.4948454 ==> delete leaf row length index
10~20% index (rebuild) .
* Index Rebuild
Index altered.
Index analyzed.
2 from index_stats;
0 ==> rebuild 0 .
- rebuild option : parallel, rebuild nologging
.
- rebuild : reorg
- * -
TABLE
- * -
TABLE
- * -
(Join) ?
sql .
- * -

- * -
(Join)
SELECT * FROM EMP a, EMPTEST b
WHERE a.deptno = b.deptno
1 0 MERGE JOIN
2 1 SORT (JOIN)
4 1 SORT (JOIN)
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
(Join) (Driving)
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
(Join) (Join)

TABLE1 TABLE2 TABLE3
.
TABLE1 ( ) () .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
(Join) (Index)
INDEX SORT MERGE (FULL SCAN)
[ FULL SCAN] TAB1 ROW
TAB2
.
. . 3 .
SORT MERGE . hash(choose)
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

WHERE a.KEY1 = b.KEY2
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

WHERE a.KEY1 = b.KEY2
AND b.FLD2 = 'ABC'
AND a.FLD1 = '10'

a.FLD1 10 (10000ROW) KEY1=KEY2 FLD2=ABC . (3ROW)
a.FLD1 FLD2 .
x
x
x
x
x
Ordered FROM TABLE JOIN .
Analyze .(cbo)
ORDERED .(TAB2 TAB1)
supressing (FLD1) (FLD2) .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
JOIN ()
WHERE X.CUSTNO = Y.CUSTNO
AND X.CHULDATE = '941003'
AND Y.NATION = 'KOR'
INDEX RANGE SCAN CU_NATION
AND-EQUAL
WHERE X.CUSTNO = Y.CUSTNO
AND X.CHULDATE = '941003'
AND Y.NATION = 'KOR'
INDEX RANGE SCAN CH_CHULDATE
INDEX UNIQUE SCAN PK_CUSTNO
FROM . ORDERED
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
()
WHERE X.CUSTNO = Y.CUSTNO
AND X.CHULDATE = '941130'
AND Y.NATION = 'KOR'
INDEX RANGE SCAN CU_NATION
AND-EQUAL
WHERE RTRIM(X.CUSTNO) = Y.CUSTNO
AND X.CHULDATE = '941130'
AND Y.NATION = 'KOR'
INDEX RANGE SCAN CH_CHULDATE
INDEX UNIQUE SCAN PK_CUSTNO
WHERE RTRIM(X.CUSTNO) =
Merge join(sort)
Index range scan ch_chuldate
Index range scan cu_nation
- * -

?
?( )
TAB1 A2 = '10'
TAB3 C1 = B2
TAB3 Full table scan
. . . . . . . . . . . . . . . . . . . . . . . .
WHERE x.A1 = y.B1
and z.C1 = y.B2
and x.A2 = '10'
CASE ACCESS PATH
. .
tab3 10 3 .
. …
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Loop-Query( )
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Loop-Query(TAB1 )
2 .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
JOIN LOOP-QUERY

.
- * -
Nested Loop Join
, .
SELECT a.Fld1,..., b.Col1,...
WHERE a.Key1 = b.Key2
AND a.Fld1 = ‘AB’
INDEX UNIQUE SCAN KEY1
INDEX UNIQUE SCAN KEY2
Tab1 Fld1 Index Fld1 = ‘AB’
Fld1 Index ROWID Tab1
Tab1 Key1 Tab2 Key2 Index Index .
Key2 ROWID Tab2 , .
Fld1 Index Fld1 (Nested) (Loop).
SELECT a.COMM
WHERE a.deptno=b.deptno
AND a.job = '7654'
- * -
Nested Loop Join
: Driving Table .
: .
: .
.
Random Access : Driving Table Random Access, Scan, Random Access.
: .
, : .
: Check .
Hint : Nested Loop => /*+ USE_NL */
(From ) => /*+ ORDERED */
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
!! ?
Driving?
(Record Set) Driving
Driving Record Set
Optimizer Driving ?
-Analyze
Rule-Based
-Ranking From Driving
SELECT * FROM DEPT WHERE DNAME LIKE 'AC%' ..
Analyze fullscan . .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Nested Loop Join
SELECT a.FLD1, ..., b.FLD1,...
WHERE a.KEY1 = b.KEY2
AND a.FLD1 = 'AB'
AND b.FLD2 = '10'
( )
(Random)
( )


INDEX
(FLD1)
WHERE a.deptno=b.deptno
AND a.job = '7654'
Sort .
) .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Sort Merge JOIN
SELECT a.Fld1,..., b.Col1,...
WHERE a.Key1 = b.Key2
AND a.Fld1 = ‘AB’
MERGE JOIN
SORT JOIN
INDEX UNIQUE SCAN KEY1
TABLE ACCESS FULL TAB2
Tab1 Fld1 Index Fld1 = ‘AB’ Key1 .
Tab2 Key2 .
Scan Key1 = Key2 Merge .
SELECT *
WHERE a.deptno=b.deptno
--AND a.empno = '7654'
merge join.. …???
WHERE a.deptno=b.deptno
AND a.empno = '7654'
- * -
Sort Merge JOIN
: .
: .

: .
Scan : Random Access , Merge Scan.
: .
:Join .

- * -
Sort Merge JOIN
.

.


.
- * -
Sort Merge JOIN
SELECT /*+ use_merge(a b) */
WHERE a.KEY1 = b.KEY2
AND a.FLD1 = 'AB'
AND b.FLD2 = '10'
.
.
.
.
.
.
.
.
.
.
.
.
(Scan)
()
- * -
Nested Loop Join
SELECT a.FLD1, ..., b.FLD1,...
WHERE a.KEY1 = b.KEY2
AND a.FLD1 = 'AB'
b.FLD2 = '10'
Check
b.FLD2 = '10‘ I/O .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Sort Merge JOIN
SELECT /*+ USE_MERGE(a b) */
WHERE a.KEY1 = b.KEY2
AND a.FLD1 = 'AB'
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
----------------------
WHERE a.deptno=b.deptno
AND a.empno = '7369'

INDEX PK_EMPNO4 RANGE SCAN Cost = 1
SORT JOIN Cost = 2
INDEX DNAME2_IDX RANGE SCAN Cost = 1 Full Scan.
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Nested_loop, Sort_merge
WHERE X.CUSTNO = Y.CUSTNO
INDEX RANGE SCAN CH_CHULDATE
INDEX UNIQUE SCAN PK_CUSTNO
INDEX RANGE SCAN CH_CHULDATE
INDEX UNIQUE SCAN PK_CUSTNO
SQL> SELECT NATION, SUM(CHULTIME)
WHERE X.CUSTNO = Y.CUSTNO
AND X.CHULDATE = '941003'
GROUP BY NATION
groupby nested loop.
..
- * -
Nested_loop, Sort_merge
WHERE X.CUSTNO = Y.CUSTNO
INDEX UNIQUE SCAN PK_CUSTNO
WHERE X.CUSTNO = Y.CUSTNO
GROUP BY NATION
WHERE X.CUSTNO = Y.CUSTNO
GROUP BY NATION
SORT GROUP BY
INDEX RANGE SCAN CH_CUSTNO
ALL_ROWS .
GROUP BY NESTED_LOOP (?)
Rule nested loops
- * -
Many to One JOIN()
WHERE a.DEPT = b.DEPT
AND a.FLD1 = 'AB'
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
JOIN
Out-join Driving Check .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Nested Loop Join
- * -
Nested Loop Join
- * -
Sort Merge JOIN
- * -
Hash join
(100 ) . ( Y=f(x) )
1. .
2.
3. . .()
4. 2~3 .
CPU . ( )
.
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
VIEW
DATA DICTIONARY
2. SQL
6. Binding
7. Execution
=====================================

1 select
2. ( )
3. .
)=========================
- * -
VIEW
WHERE x. = y.
AND y. = '9610'
GROUP BY
ORDER BY
WHERE x. = y.
AND y. = '9610'
ORDER BY

group by . 1:1
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
OUTER JOIN View
WHERE a.content_id = b.DATA_ID(+)
AND a.CATEGORY_ID > 80
.. .
, …
SELECT * FROM WCM_CONTENT a, a_view b
WHERE a.content_id = b.data_id(+)
AND category_id >80
WHERE x.content_id = y.data_id(+)
AND x.CATEGORY_ID > 80
WHERE a.content_id = b.DATA_ID(+)
AND a.CATEGORY_ID > 80
Inline View
View
OR
SELECT *
FROM WCM_CONTENT x, (SELECT data_id FROM WCM_LOCK WHERE user_id IN(1,2)) y
WHERE x.CATEGORY_ID > 80
?? /*+INDEX(A WCM_CONTENT_PK) */
- * -
& SQL 2

- * -



(chain)

' '(blank)
(Alphanumeric)
BLANK
NULL

www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
VARCHAR2

NULL



NULL
PCTFREE

' '(space)

www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
!
100*upd/(upd+ins)
ins : insert
- PCTUSED : default 40, delete pctused free list .
100-PCTFREE-100*rows*(ins+upd)/blocksize
=========================================================================================
- chaining : insert block 2k data(row) 4k .
a. 1 : analyze table, dba_tables
SQL> analyze table scott.emp compute statistics;
Table analyzed.
2 where table_name='EMP';
---------- ----------
14 0 -> test db ... production
block .
- * -
!
alter table <table_name> deallocate unused ...
- full table scan high water mark read . high water mark
delete space performance .
- high water mark block performance
- truncate reset . (delete )
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

CHAR
VARCHAR2




BLANK
CHAR


VARCHAR2 NOT NULL
- * -

SELECT * FROM EMPTEST2
WHERE job = ename
SELECT * FROM EMPTEST2
WHERE job='11'
SELECT * FROM EMPTEST2
WHERE hiredate='11'
SELECT * FROM EMPTEST2
WHERE job = hiredate
-- 0 .
(JOIN) VARCHAR2
(char) -- 1
-- 1
--1
- * -
NUMBER





NUMBER

38
-84 ~ 127
,
-130
125
- * -
NUMBER
-- FULL SCAN
-- RANGE SCAN
EMP PK NUMBER EMPTEST PK CHAR .
SEQUENCE NUMBER … ( internal ) .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

- * -


       SQL . DML(SELECT, INSERT, UPDATE, DELETE) . . .
.

       .
       .
       SQL .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

- * -
(HINT)
SEX_INDEX */
optimizer .
optimizer execution plan .
hint execution plan optimizer .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
HINT ()
INDEX_ASC () INDEX
AND_EQUALS INDEX MERGE (2 ~ 5 )
ORDERED FROM TABLE JOIN
USE_NL TABLE ROW
TABLE ROW
USE_MERGE TABLE SORT
MERGE JOIN
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
HINT ()
- * -
EXPLAIN PLAN
sql> select col3, sum(col4)
group by col3
select col3, sum(col4)
group by col3
index
plan_table
- * -
EXPLAIN PLAN
. decode (id, 0,'Cost Estimate:'|| .
CONNECT by prior ID = PARENT_ID and STATEMENT_ID = '&&id'
plan_table
plan.sql

ID OPERATION OPTIONS OBJECT_NAME
0 SELECT STATEMENT 1 CONCATENATION 2 TABLE ACCESS BY ROWID :SCOTT. TAB1(1) 3 INDEX RANGE SCAN :SCOTT.TAB1_IDX (NU) 4 TABLE ACCESS BY ROWID :SCOTT.TAB1(1) 5 INDEX RANGE SCAN :SCOTT.TAB1_IDX (NU)
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
SQL
ID OPERATION OPTIONS OBJECT_NAME
1 FILTER 2 NESTED LOOPS 3 TABLE ACCESS FULL EMP 4 TABLE ACCESS BY ROWID DEPT 5 INDEX UNIQUE SCAN PK_DEPT 6 TABLE ACCESS FULL SALGRADE
1
2
6
FILTER
NESTED
LOOPS
FROM emp, dept
WHERE emp.deptno = dept.deptno
AND not exists
WHERE emp.sal BETWEEN losal AND hisal)
.
· 3 . 2 .
·3 .
      - 5 4 ROWID .
      - 4 2 .
      - 2 3 , 4 1 .
      - 6 , 1 .
      - 1 . 6 , 2 SQL .
  3 5, 4, 2, 6, 1 . . , ( ) . , . . . , , .
  . . sorts, sort-merge join, group functions, aggregates .
.. 3-5-4-2-6-1
- * -
SQL
, SQL . (row source) . . , .
.
- 3,4,5,6 . (access paths) .
1. 3 6 EMP SALGRADE .
2. 5 PK_DEPTNO 3 DEPTNO . DEPT ROWIDS .
3. 4 DEPT 5 ROWIDS .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
SQL




1000 10
1000 1

!
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
SQL IF (else if)
ELSE IF A = 20 THEN 2
ELSE 3
END IF
FROM ……….
when 20 then 2
ELSE IF A < 20 THEN 2
ELSE 3
END IF
SELECT DECODE(SIGN(A-10),-1,1,
DECODE(SIGN(A-20),-1,2, 3))
when A < 20 then 2
else 3
- * -

ELSE IF A >= ‘DEF’ THEN 3
ELSE 2
END IF
when A >= ‘DEF’ then 3
else 2
ELSE IF A > ‘DEF’ THEN 3
ELSE 2
END IF
FROM ……….
when A > ‘DEF’ then 3
else 2
SQL>SELECT col,
             WHEN col >= 22 THEN 'D'
           END
- * -
DECODE
0.99999 ?
SELECT TO_DATE('20041020','YYYYMMDD')+1 FROM DUAL;
SQL + 1 . 2004 10 20 0000 00 .
1 86400 0.99999 86399.136 . 23 59 59 8.16 .
0.99999 2004 10 20 2004 10 20 23 59 59
.
1 0.99999 .
SELECT *
TO_DATE('20041231','yyyymmdd')--+0.99999 -- hiredate date 2004-12-31 1:00:00
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
DECODE
(=)
- * -
DECODE
SELECT NVL(SUM( DECODE( col1, 1, qty )), 0), …
NVL !
SELECT SUM( DECODE( market, ’D',
DECODE(type, ’1', DECODE(unit, ‘A’, 0.2*col, ‘B’, 0.5*col, ... …...
SELECT SALEDEPT,
............................
SELECT deptno,
SUM(DECODE( SUBSTR(work_dt,7,2), ‘02’, amt )), --2
SUM(DECODE( SUBSTR(work_dt,7,2), ‘03’, amt )), --3
SUM(DECODE( SUBSTR(work_dt,7,2), ‘04’, amt )), --4 …
SUM(DECODE( SUBSTR(work_dt,7,2), ‘31’, amt )) --31 FROM
WHERE work_dt like ‘199810%’
WHERE work_dt like ‘199810%’
GROUP BY deptno, substr(work_dt,7,2) )
GROUP BY deptno ;
GROUP BY ! ()
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
UPDATE
UPDATE table_name
( SELECT any_style_logical_column, …
FROM tables
WHERE conditions ……… )
- * -
NULL UPDATE
UPDATE table1 x
FROM table2
where z.key = x.key. )
UPDATE table1 x
FROM table2
- * -

UNION, GROUP BY

- .
-
- * -
!! …
- * -
SELECT *
index range scan orddate_index
index unique scan cust_pk
- * -

SELECT y.DEPT_NAME,
WHERE x.DEPT_CD = y.DEPT_CD
and x.YYMM = :IN_DATE
and x.SAUP = :SAUP
GROUP BY y.DEPT_NAME ;
WHERE x.DEPT_CD = y.DEPT_CD ;
WHERE A.DEPTNO = B.DEPTNO
GROUP BY A.DEPTNO
SELECT A.DEPTNO, A.TOT
FROM DEPT B,
GROUP BY DEPTNO ) A
- * -
OR()
IN OR

www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
OR()
OR
IN ( )
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
OR
CONCATENATION()
INDEX (RANGE SCAN) OF ‘A_INDEX’
TABLE ACCESS (BY ROWID) OF ‘TAB1’
INDEX (RANGE SCAN) OF ‘B_INDEX’
-- SAL EMPTEST2 FULL SCAN...
SELECT *
-- ENAME, COMM INDEX
- * -
IN
INDEX (RANGE SCAN) OF ‘A_INDEX’
TABLE ACCESS (BY ROWID) OF ‘TAB1’
INDEX (RANGE SCAN) OF ‘B_INDEX’
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
DECODE OR
SELECT …………………………
WHERE join_conditions …………
between SYSDATE - 60
WHERE join_conditions …………
DECODE(:, ‘2’, ‘30’) )
and SYSDATE
- * -
IN


A = and B in ( ‘1’, ‘3’ ) = (A = and B = ‘1’) or (A = and B = ‘3’)
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
IN
SELECT * FROM TAB1
WHERE COL1 = ‘B’
.
SELECT * FROM TAB1
WHERE COL1 = ‘C’
and COL2 between ‘111’ and ‘113’
COL1 COL2 .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

.
.( )
.( )
WHERE .

Vs
.
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Cost Based Optimizer


: Selectivity
Selectivity

DB_FILE_MULTIBLOCK_READ_COUNT
optimizer WHERE .
optimizer ,
index , .
optimizer .
optimizer hints . hints optimizer
.
optimizer .
Selectivity : selectivity query row percentage.
row percentage query selectivity .
percentage rows query poor selectivity .
optimizer poor selectivity query good selectvity full table scan
. index index scan . good selectvity
full table scan poor selectivity full table scan
index scan .
WHERE

DB_FILE_MULTIBLOCK_READ_COUNT : full table scan multi-block read
full table scan multi-block
. multi-block DB_FILE_MULTIBLOCK_READ_COUNT
, single multi-block read block .
optimizer full table scan

- * -
SQL

.
DECODE
SELECT
WHERE
ROWID
DECODE

(ex:column-name + 3000)
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
SQL

OR IN UNION

, .

HAVING , .

, .

UNION , , .
UNION ALL .
OR IN UNION
OR Full-Scan.
- * -
Hash Join Nested Loop Join
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Hash Join Nested Loop Join
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Nested Loop Join
FROM Tab1 b, Tab2 a
WHERE b.Key2 = a.Key1 and a.Key1 = ‘AA’ and a.Col1 = ‘11’ and b.Col2 = ‘22’
Key1 =‘AA’
- * -
Nested Loop Join
WHERE a.Key1 = b.Key2
AND a.Fld1 = ‘AB’
INDEX UNIQUE SCAN KEY1
INDEX UNIQUE SCAN KE2
Tab1 Fld1 Index Fld1 = ‘AB’
Fld1 Index ROWID Tab1
Tab1 Key1 Tab2 Key2 Index
Index .
Key2 ROWID Tab2 ,
.
Fld1 Index
Fld1 (Nested)
(Loop).
- * -
Nested Loop Join
.

.
Random Access
Driving Table Random Access,
Scan, Random Access.

,
.

.
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Nested Loop Join
.
Join
.
Driving Table Random Access
Sort/Merge Join .

.
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Nested Loop( !!)
where a. like ‘aa%’
where a. like ‘aa%’
2. .
3.
(Driving Table )
4.
.
.
.
.
8.On-Line .
(From ) => /*+ ORDERED */
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Nested Loop(Driving Table 1)
TAB2 1*(2+2*10) 10
TAB3 1*10*(2+2*100) 100
Total 2046
TAB1 10*(2+2*1) 1
TAB3 10*1*(2+2*100) 100
Total 2082
TAB2 100*(2+2*10) 10
TAB1 100*10*(2+2*1) 1
Total 222402


- * -
Nested Loop(Driving Table 2)
(Record Set) Driving
Driving Record Set
Driving?
Driving
Driving
Catalog

Rule-Based
Cost-Based
- * -
Sort/Merge Join
TABLE ACCESS
select a.Col1,...,b.Col2 from Tab1 b, Tab2 a
where b.Key2 = a.Key1 and a.Key1 = ‘AA’ and a.Col1 = ‘11’ and b.Col2 = ‘22’
Key1 =‘AA’
- * -
Sort/Merge Join
WHERE a.Key1 = b.Key2
AND a.Fld1 = ‘AB’
EXPLAIN PLAN
MERGE JOIN
SORT JOIN
INDEX UNIQUE SCAN KEY1
TABLE ACCESS FULL TAB2
Tab1 Fld1 Index Fld1 = ‘AB’ Key1
.
Scan Key1 = Key2
Merge .
- * -
Sort/Merge Join


.
, Merge Scan.

- * -
Sort/Merge Join

.

.


.
- * -
Hash Join (1)
SELECT B..Customer_Name, A.Order_amt
WHERE B.Customer_Id = A.Customer_Id
Partition(Group)
2. Partition
3. Partition

1. Hash Join/Merge Join Optimizer
2. unique
3. Partion IO
4. (Nested Loop,Merge Join) CPU CPU

www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Hash Join (2)
Equi Join .
table 1 .
SELECT S.a, B.a FROM S,B
WHERE S.a = B.a
(CLUSTER)
3
JOIN 3 , Sort merge join, Nested loop join, Hash join .
Hash Join (HJ) 7.3
index level depth Sort Merge Join (SMJ) Nested Loops (NL)
.
sort SMJ , table table join .
hash join equi join .
HJ driving table index .
SMJ NL , SMJ merge table
sort .
NL driving table row data inner table
probe() .
HJ table 1 pass .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Hash Join (1)
2. table Driving table.
3. Join column Hash function
bitmap vector
1 2 3 4 ...
...
bitmap vector
5. Bit vector filtering
WHERE S.a = B.a
Small table : S
Big table : B
Hash join Oracle .
, partition join algorithm grace join .
join value partition
.
1. partiton . fan out .
high fan out partition i/o ,low fan out
partition hash memory hit .
performance ( bit map )
hash area size , hash multi block io .
2. driving table .( table )
3. small table column hash area partition
join column hash function1 partition hash function2
hash value . bitmap vector .
bitmap 2 bucket hash function 1 2 .
partition 100 100* 100 10000 cell .
4. row bitmap marking .
5 step driving table table
function1,2 . hash value driving table bitmap
1 join column join
row . bit vector filtering .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Hash Join (2)
** Where Index
row
WHERE S.a = B.a
** Memory disk Swapping
hash table full table scan .
where index row
hash table .
hash array size , disk temp segment
.
6. B joined value hash function 1 row bit vector , memory
partition join return .
memory disk S partition .
7. 1 B pass S partition temp segment memory
hash table . B partition memory join .
-> , disk partition (S,B) .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
WHERE S.a = B.a
1 0 1 0 0
2 0 0 0 0
3 0 1 1 1
4 1 1 0 1
driving table hash function 1, 2 bitmap .
hash area partition disk .
disk partition partition row disk update .
hash area 1 partition memeory partition
disk . .
R table row .
partition memeory .
B table . hash function hash value memory
partition hit check .
row joined row .
row partiion write .
S hash function S B value
partition number
** unique join keys bitmap bitmap partition value flag .
S row disk partititon .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Hash Join Parameter
HASH_MULTIBLOCK_IO_COUNT :
hashed row .
hash_area_size, db_block_size and hash_multiblock_io_count parameters .
20% overhead .
storing partitions, the bitmap of unique left input and the hash table :
Partitions = 0.8 x hash_area_size
----------------------------
(db_block_size x hash_multiblock_io_count)
row table (R ), row hash algorithm .
row bucket 2 algorithm .
hash row partition 1 hash function ,
2 hash value hash row .
hash value bitmap .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Locking ?
Row-Level Locking
Table-Level Locking
Multi-User
Multi-User
Data Concurrency/Read Consistency
Locking .
.
DML Lock , DDL Lock .
TPO(Transaction Processing Option) .
Table-Level Locking
Lock .
, .
.
TPO INIT.ORA ROW_LOCKING = INTENT .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

Tablespace Data File
Tablespace Data file ( Disk )
I/O
data dictionary table, index, cluster
SYSTEM tablespace tablespace
Database Schema
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

Redo Log Files Data Files
OS Data Files

//
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Tablespace, Extent, Block
- * -

Data Segment
Rollback Segment
Index Segment
Temporary Segment
Index Segment : Index
.

- * -

Bytes/Block
Operating System
Free Space : Row
Block Infomation : Block Address, Segment type, Block Table Row,
Header
- * -

. Disk I/O Contention
-
- /
. Disk
. Extents
- * -
Rollback Segment
Rollback segment
Rollback Segment Monitoring
Rollback Segment Extent
rollback segment extents 20
Transaction rollback segment Oracle transaction rollback segment , rollback segment active transaction active transaction rollback segment .
Rollback segment
(transaction) .
, rollback segment
On-Line Transaction
rollback segment rollback segment
rollback segment .
"SET TRANSACTION USE ROLLBACK SEGMENT"
rollback segment init parameter file
rollback segment rollback
segment .
extent , rollback segment grow shrink , extent , rollback segment shrink Oracle resource .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Rollback segment /
rollback segment
CEIL (TRANSACTION / TRANSACTIONS_PER_ROLLBACK_SEGMENT)
4
Rollback segment Storage Optimal Option
1 rollback segment transaction
2 Rollback segment

Oracle7 rollback segment extent (deallocate) .
, active transaction rollback segment extent ,
optimal parameter rollback segment storage setting .
Rollback segment 10 Initial Next
MaxExtents 10 ( Rollback segment
)
peak time rollback segment .
select initial_extent + next_extent*(extents -1) "RBS SIZE(byte)", extents
from dba_segments
where segment_type ='ROLLBACK';
(byte) rollback segment optimal size .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
EXTENTS
Extension Disk I/O Disk I/O
Monitoring
SQL*DBA Connect
DBA_EXTENTS Dictionary View Object Extent
Extents
Extent
Extents : Primary Space, Secondary Space
Object Objects

.

-
Primary Space

-
- - Primary Space
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Extents Deallocate
DEALLOCATE
High Water Mark
Free
Extent 1
Extent 3
Free Space
Extent 2
TABLE, INDEX, CLUSTER DATABASE OBJECT
EXTENT .
EXTENT
.
DISK .
High Water Mark : Data Delete
Deallocate
EMPTY_BLOCKS BLOCKS
EMPTY_BLOCKS : OBJECT SPACE HIGH WATER MARK
BLOCKS : OBJECT SPACE HIGH WATER MARK
EMPTY_BLOCKS + BLOCKS( OBJECT SPACE) EMPTY_BLOCKS
DATA INSERT DEALLOCATE .
ALTER TABLE table_name DEALLOCATE UNUSED [KEEP integerK] ;
ALTER INDEX index_name DEALLOCATE UNUSED [KEEP integerK] ;
ALTER CLUSTER cluster_name DEALLOCATE UNUSED [KEEP integerK] ;
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
FREE EXTENTS
3. Free Extents Coalesce
Free
Space
Free Extent COALESCING .
( TABLE OBJECT EXTENT ) SMON ORACLE EXTENT .
a. EXTENT SIZE FREE SPACE
b. a FREE SPACE
EXTENT SIZE FREE SPACE
c. b FREE SPACE
FREE SPACE COALESCE a, b .
d. c EXTENT ERROR RETURN
EXTENT 5 SMON COALESCING .
ALTER TABLESPACE coal_test COALESCE ; (Version 7.3 )
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
SQL_TRACE : Trace file
Initial Parameter file
"PLAN_TABLE"
FOR SELECT statement
SQL_TRACE : SQL session trace .
SQL_TRACE .
CPU (Elapsed)
(Disk), (Memory)

TKPROF : TKPROF utility SQL_TRACE trace file

Execute : SQL .
Update, Delete, Insert .
Fetch : SQL fetch .
Partial Range Scan > Select
(SUM, COUNT )
Execute .
Count : SQL parsing , , fetch .
, OCI .
elapsed : .
Disk : Disk buffer .
Query : buffer .
Select Update, Delete, Insert .
Current : mode( Update) buffer .
Update, Insert, Delete .
Select .
Rows : Fetch execute call .
query sub-query .
--------------------------------------------------------------------------------------------------------------
- * -
Cost-Based Optimizer Analyzer

:
ESTIMATE
DELETE

1 Analyze !!
Index, Table, Cluster .
Cost based Optimizer .
Object Chain
.
COMPUTE : .
.
ESTIMATE : data .
.
Table
Chain
Column
- * -
& SQL 3
SQL New Feature(8i,9i)
- * -
Scalar Subqueries - 1
FROM emp b
WHERE b.empno > 0
SELECT empno, ename,deptno
FROM emp b
WHERE b.empno > 0 AND (SELECT dname FROM dept a WHERE a.deptno =b.deptno) ='SALES'
WHERE
SELECT empno, ename,deptno
FROM emp b
WHERE b.empno > 0
AND ( ( SELECT dname FROM dept a WHERE a.deptno =b.deptno) = ( SELECT dname FROM dept a WHERE a.deptno =30))
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Scalar Subqueries - 1
ORDER BY (SELECT dname FROM dept a WHERE a.deptno =b.deptno)
CASE
FROM DEPT
- * -
Use Case Expressions
Simple CASE expression
ELSE 'X'
END) department_name
FROM EMP
INSERT INTO EMP_TMP
ELSE 'HSG'
- * -
SELECT * FROM emp
job = 'CLERK' AND sal > 1500 AND comm IS NOT NULL;
SELECT * FROM emp
SAL>1500 OR COMM IS NOT NULL AND job='CLERK'

- * -
ORACLE – TUNING & SQL
Oracle 8i Data Warehouse Analytic Function .
8.1.6 Function 8.1.7 27 Function .
RDB , , , , , SQL , 3 G/L , SQL Analytic Function SQL .
Analytic Function
.
Partition By : .
Order By : Order By
.
.
- * -
RANK(), DENSE_RANK(), ROW_NUMBER()
SELECT DEPTNO, ENAME,SAL,
FROM EMP;
- * -
SELECT MGR,ENAME,SAL,
FROM EMP;
SELECT MGR,ENAME,SAL
FROM EMP)
FROM EMP;
* Windowing
CURRENT ROW/
value_expr PRECEDING/FOLLOWING
- * -
Analytic Function –
SELECT DEPTNO,ENAME,SAL,
FROM EMP;
SELECT DEPTNO,ENAME,SAL,
FROM EMP;
2.LAST_VALUE
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Analytic Function –
SELECT ENAME,TO_CHAR(HIREDATE,'YYYYMMDD')HIREDATE,
FROM EMP;
FROM EMP;
FROM EMP;
FROM EMP;
.
4.LEAD
.
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
FROM EMP
() .
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Analytic Function – ROLLUP
SELECT empno,ename ,SUM(sal)
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -
Analytic Function – aggregate
over (partition by ms_store order by ms_month rows unbounded preceding)
as balance

- * -
Analytic Function – rank
select ms_store, ms_year, sum(ms_salesdi),
rank() over (partition by ms_year order by sum(ms_salesdi) desc ) as rank
from monthly_sales_fmc
- * -
RANK()
select empno, deptno,dense_rank() over(PARTITION BY deptno order by empno , rowid) rank
from emp order by empno
select empno, deptno,dense_rank() over(order by empno , rowid) rank
from emp order by empno
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -

SELECT * FROM
(SELECT C.*, V.VER, L.DATA_ID, L.USER_ID LOCK_USER_ID, f_user_name(L.USER_ID) LOCK_USER_NAME,
f_user_name(c.create_user_id) create_user, f_user_name(c.update_user_id) update_user ,
WHERE CONTENT_STATE='ACTIVE'
ORDER BY CONTENT_ID DESC )
(non-unique)
data_id >0 c.content_id >0 –2
STOP KEY –0.01
()
- * -

FROM WCM_CONTENT C, WCM_USER U, WCM_CATEGORY CA, WCM_SITE S
WHERE C.dbsts='A'
AND C.UPDATE_USER_ID=U.USER_ID
AND C.CATEGORY_ID=CA.CATEGORY_ID
AND CA.SITE_ID=S.SITE_ID
AND C.UPDATE_DATE > '0')

2 sec
0.01 ??
www.Developerclub.com(www.cyworld.com/ritenour72) Copyright Shin Min Soo All rights reserved. Since 2003.03.20
- * -