๊ธฐ๋ณธ ๋ฉ์ปค๋์ฆ
์ฌ์๊ณผ ๊ณ ๊ฐ ํ
์ด๋ธ์์ 1996๋
1์ 1์ผ ์ดํ ์
์ฌํ ์ฌ์์ด ๊ด๋ฆฌํ๋ ๊ณ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ ค๊ณ ํ๋ ๊ฒฝ์ฐ
์ฌ์ ํ
์ด๋ธ๋ก๋ถํฐ 1996๋
1์ 1์ผ ์ดํ ์
์ฌํ ์ฌ์์ ์ฐพ๊ณ , ๊ฐ ๊ฑด๋ง๋ค ๊ณ ๊ฐ ํ
์ด๋ธ์์ ์ฌ์๋ฒํธ๊ฐ ์ผ์นํ๋ ๋ ์ฝ๋๋ฅผ ์ฐพ์ ์ ์์
Nested Loop ์กฐ์ธ์ ์๋ฆฌ
begin
for outer in (select ์ฌ์๋ฒํธ, ์ฌ์๋ช
from ์ฌ์ where ์
์ฌ์ผ์ >= '19960101' )
loop
for inner in (select ๊ณ ๊ฐ๋ช
, ์ ํ๋ฒํธ from ๊ณ ๊ฐ where ๊ด๋ฆฌ์ฌ์๋ฒํธ = outer.์ฌ์๋ฒํธ)
loop
dbms_output.put_line(outer.์ฌ์๋ช
|| ' : ' || inner.๊ณ ๊ฐ๋ช
|| ' : ' || inner.์ ํ๋ฒํธ);
end loop;
end loop;
end ;
NL ์กฐ์ธ์ Outer์ Inner ์์ชฝ ํ
์ด๋ธ ๋ชจ๋ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉ
Outer์ชฝ ํ
์ด๋ธ ์ฌ์ด์ฆ๊ฐ ํฌ์ง ์์ผ๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ์ง ์์ ์ ์์
Table Full Scan์ ํ๋๋ผ๋ ํ ๋ฒ์ ๊ทธ์น๊ธฐ ๋๋ฌธ
Inner๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด์ผ ํจ
Inner ๋ฃจํ์์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด, Outer ๋ฃจํ์์ ์ฝ์ ๊ฑด์๋งํผ Table Full Scan์ ๋ฐ๋ณตํ๊ธฐ ๋๋ฌธ
Inner์์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ
NL ์กฐ์ธ์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ ์กฐ์ธ ๋ฐฉ์
์์
๊ฐ์
์ฌ์ ํ
์ด๋ธ์ ์
์ฌ์ผ์ ์ธ๋ฑ์ค์ธ ์ฌ์_X1์ด, ๊ณ ๊ฐ ํ
์ด๋ธ์ ๊ด๋ฆฌ์ฌ์๋ฒํธ ์ธ๋ฑ์ค์ธ ๊ณ ๊ฐ_X1์ด ์กด์ฌ
์ฌ์ ํ
์ด๋ธ์์ ํ์ ๊ณผ์
์ฌ์_X1์์ ์
์ฌ์ผ์ >= '19960101'์ธ ์ฒซ ๋ฒ์งธ ๋ ์ฝ๋๋ฅผ ์ฐพ์
์ธ๋ฑ์ค์์ ์ฝ์ ROWID๋ก ์ฌ์ ํ
์ด๋ธ ๋ ์ฝ๋๋ฅผ ์ฐพ์
๊ณ ๊ฐ ํ
์ด๋ธ์์ ํ์ ๊ณผ์
์ฌ์ ํ
์ด๋ธ์์ ์ฝ์ ์ฌ์๋ฒํธ๋ก ๊ณ ๊ฐ_X1 ์ธ๋ฑ์ค ํ์
๊ณ ๊ฐ_X1 ์ธ๋ฑ์ค์์ ์ฝ์ ROWID๋ก ๊ณ ๊ฐ ํ
์ด๋ธ ๋ ์ฝ๋๋ฅผ ์ฐพ์
์ฌ์ ํ
์ด๋ธ์์ ์ฐพ์ ๋ ์ฝ๋์ ์ฌ์๋ฒํธ๋ฅผ ๊ธฐ์ค์ผ๋ก, ๊ณ ๊ฐ_X1 ์ธ๋ฑ์ค๋ฅผ ๊ณ์ ํ์(๊ด๋ฆฌ์ฌ์๋ฒํธ๊ฐ ์ ๋ํฌ๊ฐ ์๋๊ธฐ ๋๋ฌธ)
์ฌ์_X1์์ ์
์ฌ์ผ์๊ฐ >= '19960101' ์ธ ๋ชจ๋ ๋ ์ฝ๋์ ๋ํด ์ ๊ณผ์ ์ ๋ฐ๋ณต
NL ์กฐ์ธ ์คํ๊ณํ ์ ์ด
์์ชฝ ์ฌ์ ํ
์ด๋ธ ๊ธฐ์ค์ผ๋ก ์๋์ชฝ ๊ณ ๊ฐ ํ
์ด๋ธ๊ณผ NL์กฐ์ธํ๋ค๋ ์๋ฏธ
Execution Plan
0 SELECT STATEMENT Optimizer= ALL_ROWS
1 0 NESTED LOOPS
2 1 TABLE ACCESS (BY INDEX ROWID) OF '์ฌ์' (TABLE )
3 2 INDEX (RANGE SCAN) OF '์ฌ์_X1' (INDEX)
4 1 TABLE ACCESS (BY INDEX ROWID) OF '๊ณ ๊ฐ' (TABLE )
5 4 INDEX (RANGE SCAN) OF '๊ณ ๊ฐ_X1' (INDEX)
use_nl ํํธ๋ก NL์กฐ์ธ ์ ์ด ๊ฐ๋ฅ
ordered ํํธ๋ FROM ์ ์ ๊ธฐ์ ํ ์์๋๋ก ์กฐ์ธํ๋ผ๊ณ ์ตํฐ๋ง์ด์ ์๊ฒ ์ง์ํ ๋ ์ฌ์ฉ
SELECT *
FROM ์ฌ์ E, ๊ณ ๊ฐ C
WHERE E.์
์ฌ์ผ์ >= '19960101'
AND C.๊ด๋ฆฌ์ฌ์๋ฒํธ = E.์ฌ์๋ฒํธ
SELECT
FROM A, B, C, D
...
SELECT
FROM A, B, C, D
SELECT
FROM A, B, C, D
...
NL์กฐ์ธ ์ํ ๊ณผ์ ๋ถ์
SELECT *
FROM ์ฌ์ E, ๊ณ ๊ฐ C
WHERE C.๊ด๋ฆฌ์์ฌ์๋ฒํธ = E.์ฌ์๋ฒํธ
AND E.์
์ฌ์ผ์ >= '19960101'
AND E.๋ถ์์ฝ๋ = 'Z123'
AND C.์ต์ข
์ฃผ๋ฌธ๊ธ์ก >= 20000
์ฌ์_PK : ์ฌ์๋ฒํธ, ์ฌ์_X1 : ์
์ฌ์ผ์
๊ณ ๊ฐ_PK : ๊ณ ๊ฐ๋ฒํธ, ๊ณ ๊ฐ_X1 : ๊ด๋ฆฌ์ฌ์๋ฒํธ, ๊ณ ๊ฐ_X2 : ์ต์ข
์ฃผ๋ฌธ๊ธ์ก
index ํํธ๋ฅผ ๋ช
์ํ์ผ๋ฏ๋ก ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ์์ธ์ค
์ด๋ค ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ง๋ ์ตํฐ๋ง์ด์ ๊ฐ ๊ฒฐ์
| Id | Operation | Name | Rows | Bytes | Cost |
| 0 | SELECT STATEMENT | | 5 | 58 | 5 |
| 1 | NESTED LOOPS | | 5 | 58 | 5 |
| 2 | TABLE ACCESS BY INDEX ROWID| ์ฌ์ | 3 | 20 | 2 |
| 3 | INDEX RANGE SCAN | ์ฌ์_X1 | 5 | | 1 |
| 4 | TABLE ACCESS BY INDEX ROWID| ๊ณ ๊ฐ | 5 | 76 | 2 |
| 5 | INDEX RANGE SCAN | ๊ณ ๊ฐ_X1 | 8 | | 1 |
SQL ์คํ ์์
์ฌ์_X1์ Range ์ค์บํด ์
์ฌ์ผ์ ์กฐ๊ฑด์ ๋ง๋ ๋ ์ฝ๋๋ฅผ ์ฐพ์ (ID = 3)
์ฌ์_X1 ์ธ๋ฑ์ค์์ ์ฝ์ ROWID๋ก ์ฌ์ ํ
์ด๋ธ์ ์์ธ์คํด์ ๋ถ์์ฝ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ํ์ธ (ID = 2)
์ฌ์ ํ
์ด๋ธ์์ ์ฝ์ ์ฌ์๋ฒํธ ๊ฐ์ผ๋ก ์กฐ์ธ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ณ ๊ฐ ๋ ์ฝ๋๋ฅผ ์ฐพ๊ธฐ ์ํด ๊ณ ๊ฐ_X1์ Range ์ค์บ (ID = 5)
๊ณ ๊ฐ_X1 ์ธ๋ฑ์ค์์ ์ฝ์ ROWID๋ก ๊ณ ๊ฐ ํ
์ด๋ธ์ ์์ธ์คํด์ ์ต์ข
์ฃผ๋ฌธ๊ธ์ก ํํฐ ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ํ์ธ (ID = 4)
๊ฐ ๋จ๊ณ๋ฅผ ๋ชจ๋ ์๋ฃํ๊ณ ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ๋ ๊ฒ ์๋๋ผ, ํ ๋ ์ฝ๋์ฉ ์์ฐจ์ ์ผ๋ก ์งํํจ
NL ์กฐ์ธ ์ํ ์ ์ฐจ
11, 19, 31, 32๋ ์ค์บํ ๋ฐ์ดํฐ๊ฐ ๋ ์๋์ง ํ์ธํ๋ one-plus ์ค์บ
NL์กฐ์ธ ํ๋ ํฌ์ธํธ
์์ ๊ณผ์ ์์ ์ฒซ ๋ฒ์งธ ํ๋ ํฌ์ธํธ๋ ์ฌ์_X1 ์ธ๋ฑ์ค๋ฅผ ์ฝ๊ณ ์ฌ์ ํ
์ด๋ธ์ ์์ธ์คํ๋ ๋ถ๋ถ
๋จ์ผ ์ปฌ๋ผ ์ธ๋ฑ์ค๋ฅผ '>=' ์กฐ๊ฑด์ผ๋ก ์ค์บํ์ผ๋ฏ๋ก ๋นํจ์จ ์์ด (5 + 1)๊ฑด์ ์ฝ์๊ณ , ๊ทธ๋งํผ๋ง ํ
์ด๋ธ ๋๋ค ์์ธ์ค ๋ฐ์
๋ง์ฝ ์ฌ์ ํ
์ด๋ธ๋ก ์์ฃผ ๋ง์ ์์ ๋๋ค ์์ธ์ค๊ฐ ๋ฐ์ํ๊ณ , ํ
์ด๋ธ์์ ๋ถ์์ฝ๋ ์กฐ๊ฑด์ ์ํด ํํฐ๋ง๋๋ ๋น์จ์ด ๋์ ๊ฒฝ์ฐ
์ฌ์_X1์ ๋ถ์์ฝ๋ ์ปฌ๋ผ์ ์ถ๊ฐํ๋ ๋ฐฉ์ ๊ณ ๋ ค
๋ ๋ฒ์งธ๋ ๊ณ ๊ฐ_X1 ์ธ๋ฑ์ค๋ฅผ ํ์ํ๋ ๋ถ๋ถ
์กฐ์ธ ์์ธ์ค ํ์๊ฐ ๋ง์์๋ก ์ฑ๋ฅ์ด ๋๋ ค์ง
์กฐ์ธ ์์ธ์ค ํ์๋ Outer ํ
์ด๋ธ์ธ ์ฌ์์ ์ฝ๊ณ ํํฐ๋งํ ๊ฒฐ๊ณผ ๊ฑด์์ ์ํด ๊ฒฐ์
๋ง์ฝ ๋ถ์์ฝ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ ์ฝ๋๊ฐ 100K์ด๊ณ , ๊ณ ๊ฐ_X1์ Depth๊ฐ 3์ด๋ผ๋ฉด, 300K์ ๋ธ๋ก์ ์ฝ์ด์ผ ํจ
๋ฆฌํ ๋ธ๋ก์ ์ํ์ ์ผ๋ก ์ค์บํ๋ ๊ณผ์ ์์ ์ถ๊ฐ์ ์ธ ๋ธ๋ก I/O๊ฐ ๋ฐ์
์ธ ๋ฒ์งธ๋ ๊ณ ๊ฐ_X1์ ์ฝ๊ณ ๊ณ ๊ฐ ํ
์ด๋ธ์ ์์ธ์คํ๋ ๋ถ๋ถ
์ต์ข
์ฃผ๋ฌธ๊ธ์ก ์กฐ๊ฑด์ ์ํด ํํฐ๋ง ๋๋ ๋น์จ์ด ๋๋ค๋ฉด, ๊ณ ๊ฐ_X1์ ์ต์ข
์ฃผ๋ฌธ๊ธ์ก ์ปฌ๋ผ์ ์ถ๊ฐํ๋ ๋ฐฉ์ ๊ณ ๋ ค
๋ง์ง๋ง์, ๋งจ ์ฒ์ ์์ธ์คํ๋ ์ฌ์_X1 ์ธ๋ฑ์ค์์ ์ป์ ๊ฒฐ๊ณผ ๊ฑด์์ ์ํด ์ ์ฒด ์ผ๋์ด ์ข์ฐ๋๋ค๋ ๊ฒ
์ฌ์_X1 ์ธ๋ฑ์ค๋ฅผ ์ค์บํ๋ฉด์ ์ถ์ถํ ๋ ์ฝ๋๊ฐ ๋ง์ผ๋ฉด, ์ฌ์ ํ
์ด๋ธ๋ก ๋๋ค ์์ธ์คํ๋ ํ์, ๊ณ ๊ฐ_X1 ์ธ๋ฑ์ค๋ฅผ ํ์ํ๋ ํ์, ๊ณ ๊ฐ ํ
์ด๋ธ๋ก ๋๋ค ์์ธ์คํ๋ ํ์๊ฐ ์ ๋ฐ์ ์ผ๋ก ๋ง์์ง
์ฌ๋ฐ๋ฅธ ์กฐ์ธ ๋ฉ์๋ ์ ํ
OLTP ์์คํ
์์๋ ์ผ์ฐจ์ ์ผ๋ก NL ์กฐ์ธ๋ถํฐ ๊ณ ๋ ค
์ฑ๋ฅ์ด ๋๋ฆฌ๋ค๋ฉด NL ์กฐ์ธ ํ๋ ํฌ์ธํธ์ ๋ฐ๋ผ ๊ฐ ๋จ๊ณ์ ์ํ ์ผ๋ ๋ถ์
๊ณผ๋ํ ๋๋ค ์์ธ์ค๊ฐ ๋ฐ์ํ๋ ์ง์ ํ์
์กฐ์ธ ์์ ๋ณ๊ฒฝํด์ ๋๋ค ์์ธ์ค ๋ฐ์๋์ ์ค์ผ ์ ์๋์ง, ๋ ํจ๊ณผ์ ์ธ ์ธ๋ฑ์ค๊ฐ ์๋์ง๋ฅผ ๊ฒํ
ํ์ํ๋ค๋ฉด ์ธ๋ฑ์ค ์ถ๊ฐ ๋๋ ๊ตฌ์ฑ ๋ณ๊ฒฝ
๋ง์ฝ NL๋ก ์ข์ ์ฑ๋ฅ์ ๋ด๊ธฐ ์ด๋ ต๋ค๊ณ ํ๋จ๋๋ฉด ์ํธ ๋จธ์ง ์กฐ์ธ์ด๋ ํด์ ์กฐ์ธ ๊ฒํ
NL์กฐ์ธ ํน์ง ์์ฝ
๋๋ค ์์ธ์ค ์์ฃผ ์ ์กฐ์ธ
๋ ์ฝ๋ ํ๋๋ฅผ ์ฝ์ผ๋ ค๊ณ ๋ธ๋ก์ ํต์งธ๋ก ์ฝ๊ธฐ ๋๋ฌธ์, ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ์์ ๋น ๋ฅด๊ฒ ์ฝ๋๋ผ๋ ๋นํจ์จ์ด ์กด์ฌ
์ธ๋ฑ์ค ๊ตฌ์ฑ์ด ์๋ฒฝํด๋, ๋๋ ๋ฐ์ดํฐ ์กฐ์ธ์ ๋ถ๋ฆฌ
ํ ๋ ์ฝ๋์ฉ ์์ฐจ์ ์ผ๋ก ์งํ
์ฒซ ๋ฒ์งธ ํน์ง๊ณผ ๋ฌ๋ฆฌ, ํฐ ํ
์ด๋ธ์ ์กฐ์ธํ๋๋ผ๋ ๋งค์ฐ ๋น ๋ฅธ ์๋ต ์๋๋ฅผ ๋ผ ์ ์๊ฒ ํจ
๋ถ๋ถ๋ฒ์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ์ํฉ์์ ๋ณด์ฌ์ง๋ ํน์ง
SELECT
FROM ๊ฒ์ํ A, ์ฌ์ฉ์ B
WHERE A.๊ฒ์ํ๊ตฌ๋ถ = 'NEWS'
AND B.์ฌ์ฉ์ID = A.์์ฑ์ID
ORDER BY A.๋ฑ๋ก์ผ์ DESC
์์ฐจ์ ์ผ๋ก ์งํํ๋ฏ๋ก, ๋จผ์ ์์ธ์ค๋๋ ํ
์ด๋ธ ์ฒ๋ฆฌ ๋ฒ์์ ์ํด ์ ์ฒด ์ผ๋์ด ๊ฒฐ์ ๋จ
๋ค๋ฅธ ์กฐ์ธ ๋ฐฉ์์ ๋นํด ์ธ๋ฑ์ค ๊ตฌ์ฑ ์ ๋ต์ด ์ค์
์กฐ์ธ ์ปฌ๋ผ์ ๋ํ ์ธ๋ฑ์ค ์ ๋ฌด, ์ปฌ๋ผ ๊ตฌ์ฑ ๋ฐฉ์์ ๋ฐ๋ผ ํจ์จ์ด ํฌ๊ฒ ๋ฌ๋ผ์ง
NL ์กฐ์ธ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๋ก ์ฒ๋ฆฌํ๊ฑฐ๋ ๋ถ๋ถ๋ฒ์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ OLTP ์์คํ
์ ์ ํฉ ํ ์กฐ์ธ ๋ฐฉ์
NL์กฐ์ธ ํ๋ ์ค์ต
SELECT *
FROM ์ฌ์ E, ๊ณ ๊ฐ C
WHERE C.๊ด๋ฆฌ์ฌ์๋ฒํธ = E.์ฌ์๋ฒํธ
AND E.์
์ฌ์ผ์ >= '19960101'
AND E.๋ถ์์ฝ๋ = 'Z123'
AND C.์ต์ข
์ฃผ๋ฌธ๊ธ์ก >= 20000
ROWS ROW SOURCE OPERATION
5 NESTED LOOPS
3 TABLE ACCESS BY INDEX ROWID OF ์ฌ์
2780 INDEX RANGE SCAN OF ์ฌ์_X1
5 TABLE ACCESS BY INDEX ROWID OF ๊ณ ๊ฐ
8 INDEX RANGE SCAN OF ๊ณ ๊ฐ_X1
์ฌ์_X1 ์ธ๋ฑ์ค๋ฅผ ์ค์บํ๊ณ ์ ์ฌ์ ํ
์ด๋ธ์ ์์ธ์คํ ํ์๊ฐ 2,780
ํ
์ด๋ธ์์ ๋ถ์์ฝ๋ ์กฐ๊ฑด์ ํํฐ๋งํ ๊ฒฐ๊ณผ๋ 3
๋ถํ์ํ ํ
์ด๋ธ ์์ธ์ค๋ฅผ ๋ง์ด ํ ๊ฒ
ํ
์ด๋ธ์ ์์ธ์คํ ํ ํํฐ๋ง๋๋ ๋น์จ์ด ๋๋ค๋ฉด ์ธ๋ฑ์ค์ ํ
์ด๋ธ ํํฐ ์กฐ๊ฑด ์ปฌ๋ผ์ ์ถ๊ฐํ๋ ๊ฒ์ ๊ณ ๋ ค
์ฌ์_X1์ ๋ถ์์ฝ๋ ์ปฌ๋ผ์ ์ถ๊ฐํ๋ค๊ณ ๊ฐ์
ROWS ROW SOURCE OPERATION
5 NESTED LOOPS
3 TABLE ACCESS BY INDEX ROWID OF ์ฌ์
3 INDEX RANGE SCAN OF ์ฌ์_X1
5 TABLE ACCESS BY INDEX ROWID OF ๊ณ ๊ฐ
8 INDEX RANGE SCAN OF ๊ณ ๊ฐ_X1
ํ
์ด๋ธ์ ์์ธ์คํ๊ธฐ ์ ์ธ๋ฑ์ค ์ค์บ ๋จ๊ณ์์์ ์ผ๋์ ํ์ธํ ํ์๊ฐ ์์
cr: ๋
ผ๋ฆฌ์ ๋ธ๋ก ์์ฒญ ํ์
pr: ๋์คํฌ์์ ์ฝ์ ๋ธ๋ก ์
pw: ๋์คํฌ์ ์ด ๋ธ๋ก ์
ROWS ROW SOURCE OPERATION
5 NESTED LOOPS (CR= 112 PR= 34 PW= 0 TIME = 122 US)
3 TABLE ACCESS BY INDEX ROWID OF ์ฌ์ (CR= 105 PR= 32 PW= 0 TIME = 118 US)
3 INDEX RANGE SCAN OF ์ฌ์_X1 (CR= 102 PR= 31 PW= 0 TIME = 16 )
5 TABLE ACCESS BY INDEX ROWID OF ๊ณ ๊ฐ (CR= 7 PR= 2 PW= 0 TIME = 4 US)
8 INDEX RANGE SCAN OF ๊ณ ๊ฐ_X1 (CR= 5 PR= 1 PW= 0 TIME = 0 US)
์ฌ์_X1 ์ธ๋ฑ์ค๋ก๋ถํฐ ์ฝ์ ๋ธ๋ก์ด 102๊ฐ
ํ ๋ธ๋ก์ ํ๊ท 500๊ฐ ๋ ์ฝ๋๊ฐ ์๋ค๊ณ ๊ฐ์
์ธ๋ฑ์ค์์ 3๊ฑด์ ์ป๊ธฐ ์ํด, 50,000๊ฐ์ ๋ ์ฝ๋๋ฅผ ์ฝ์ ๊ฒ
์ฌ์_X1 ์ธ๋ฑ์ค ์ปฌ๋ผ ์์๋ฅผ (๋ถ์์ฝ๋ + ์
์ฌ์ผ์) ์์ผ๋ก ์กฐ์
ROWS ROW SOURCE OPERATION
5 NESTED LOOPS (CR= 2732 PR= 386 PW= 0 TIME = ...)
2780 TABLE ACCESS BY INDEX ROWID ์ฌ์ (CR= 166 PR= 2 PW= 0 TIME = ...)
2780 INDEX RANGE SCAN ์ฌ์_X1 (CR= 4 PR= 0 PW= 0 TIME = ...)
5 TABLE ACCESS BY INDEX ROWID ๊ณ ๊ฐ (CR= 2566 PR= 384 PW= 0 TIME = ...)
8 INDEX RANGE SCAN ๊ณ ๊ฐ_X1 (CR= 2558 PR= 383 PW= 0 TIME = ...)
์ฌ์ ํ
์ด๋ธ์ ์ฝ๋ ๋ถ๋ถ์์๋ ๋นํจ์จ์ด ์์
์ธ๋ฑ์ค์์ ์ค์บํ ๋ธ๋ก์ด 4๊ฐ
ํ
์ด๋ธ์ ์์ธ์คํ๊ณ ์ ํํฐ๋ง๋๋ ๋ ์ฝ๋๋ ์์
์ผ๋์ ๋ง์ง๋ง ๋นํจ์จ์ ์์
์ฌ์ ํ
์ด๋ธ์ ์ฝ๊ณ ๊ณ ๊ฐ ํ
์ด๋ธ๊ณผ ์กฐ์ธํ๋ ํ์๋ ๋ฌธ์ ๊ฐ ์์
2780๋ฒ ์กฐ์ธ ์๋๋ฅผ ํ์ง๋ง ์กฐ์ธ์ ์ฑ๊ณตํ๊ณ ํํฐ๋ง๊น์ง ๋ง์น ์ต์ข
๊ฒฐ๊ณผ์งํฉ์ 5๊ฑด
์กฐ์ธ ์์ ๋ณ๊ฒฝ์ ๊ณ ๋ คํด๋ณผ ์ ์์
์ต์ข
์ฃผ๋ฌธ๊ธ์ก ์กฐ๊ฑด์ ์ ๋ถํฉํ๋ ๋ ์ฝ๋๊ฐ ๋ณ๋ก ์๋ค๋ฉด ํ๋์ ์ฑ๊ณตํ ์๋ ์์
๋ฐ๋์ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์๋ ์์
์ฌ์์ผ๋ก๋ถํฐ ๋๊ฒจ๋ฐ์ ์ฌ์๋ฒํธ์ ์ต์ข
์ฃผ๋ฌธ๊ธ์ก ์กฐ๊ฑด์ ์ ์กฐํฉํ๊ธฐ์ ๊ณ ๊ฐ๊ณผ ์กฐ์ธ ํ์ 5๊ฑด์ผ๋ก ์ค์ด๋ ๊ฒ
๋ง์ฝ ์กฐ์ธ ์์๋ฅผ ๋ฐ๊ฟ ์ต์ข
์ฃผ๋ฌธ๊ธ์ก ๋จ๋
์กฐํํ๋ฉด, ๋ฐ์ดํฐ๋์ด 2780๊ฑด๋ณด๋ค ๋ง์ ์๋ ์์
์์ ๋ณ๊ฒฝํด๋ ๋ณ ์๋์ด ์๋ค๋ฉด ์กฐ์ธ ๋ฐฉ์ ๋ณ๊ฒฝ์ ๊ฒํ
NL์กฐ์ธ ํ์ฅ ๋งค์ปค๋์ฆ
ํ
์ด๋ธ Prefetch
์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ํ
์ด๋ธ์ ์์ธ์คํ๋ค๊ฐ ๋์คํฌ I/O๊ฐ ํ์ํด์ง๋ฉด, ์ด์ด์ ๊ณง ์ฝ๊ฒ ๋ ๋ธ๋ก๊น์ง ๋ฏธ๋ฆฌ ์ฝ์ด์ ๋ฒํผ์บ์์ ์ ์ฌ
๋ฐฐ์น I/O
๋์คํฌ I/O Call์ ๋ฏธ๋ค๋ค๊ฐ ์ฝ์ ๋ธ๋ก์ด ์ผ์ ๋ ์์ด๋ฉด ํ๊บผ๋ฒ์ ์ฒ๋ฆฌ
๋ ๊ธฐ๋ฅ ๋ชจ๋, ์ฝ๋ ๋ธ๋ก๋ง๋ค ๊ฑด๊ฑด์ด I/O Call์ ๋ฐ์์ํค๋ ๋นํจ์จ์ ์ค์ด๊ธฐ ์ํด ๊ณ ์
ROWS ROW SOURCE OPERATION
5 NESTED LOOPS
3 TABLE ACCESS BY INDEX ROWID OF ์ฌ์
5 INDEX RANGE SCAN OF ์ฌ์_X1
5 TABLE ACCESS BY INDEX ROWID OF ๊ณ ๊ฐ
8 INDEX RANGE SCAN OF ๊ณ ๊ฐ_X1
ROWS ROW SOURCE OPERATION
5 TABLE ACCESS BY INDEX ROWID OF ๊ณ ๊ฐ
12 NESTED LOOPS
3 TABLE ACCESS BY INDEX ROWID OF ์ฌ์
3 INDEX RANGE SCAN OF ์ฌ์_X1
8 INDEX RANGE SCAN OF ๊ณ ๊ฐ_X1
ROWS ROW SOURCE OPERATION
5 NESTED LOOPS
8 NESTED LOOPS
3 TABLE ACCESS BY INDEX ROWID OF ์ฌ์
3 INDEX RANGE SCAN OF ์ฌ์_X1
8 INDEX RANGE SCAN OF ๊ณ ๊ฐ_X1
5 TABLE ACCESS BY INDEX ROWID OF ๊ณ ๊ฐ
Inner์ชฝ ํ
์ด๋ธ ๋ธ๋ก์ ๋ชจ๋ ๋ฒํผ์บ์์์ ์ฝ๋๋ค๋ฉด ์ฑ๋ฅ์ด๋ ๋ฐ์ดํฐ ์ถ๋ ฅ ์์ ์ฐจ์ด๋ ์์
์ผ๋ถ๋ฅผ ๋์คํฌ์์ ์ฝ๊ฒ ๋๋ฉด ์ฑ๋ฅ์ ์ฐจ์ด๊ฐ ๋ ์ ์์
๋ฐฐ์น I/O ์คํ๊ณํ์ด ๋ํ๋ ๋๋ ๊ฒฐ๊ณผ์งํฉ์ ์ ๋ ฌ ์์๋ ๋ค๋ฅผ ์ ์์
SELECT
A.๋ฑ๋ก์ผ์, A.๋ฒํธ, A.์ ๋ชฉ, B.ํ์๋ช
, A.๊ฒ์ํ์ ํ, A.์ง๋ฌธ์ ํ
FROM (
SELECT A.* , ROWNUM NO
FROM (
SELECT ๋ฑ๋ก์ผ์, ๋ฒํธ, ์ ๋ชฉ, ์์ฑ์๋ฒํธ, ๊ฒ์ํ์ ํ, ์ง๋ฌธ์ ํ
FROM ๊ฒ์ํ
WHERE ๊ฒ์ํ์ ํ = :TYPE
ORDER BY ๋ฑ๋ก์ผ์ DESC
) A
WHERE ROWNUM <= (:PAGE * 10 )
) A, ํ์ B
WHERE A.NO >= (:PAGE-1 )* 10 + 1
AND B.ํ์๋ฒํธ = A.์์ฑ์๋ฒํธ
ORDER BY A.๋ฑ๋ก์ผ์ DESC
์์ชฝ ์ธ๋ผ์ธ ๋ทฐ์์ ๋ฑ๋ก์ผ์ ์ญ์์ผ๋ก ์ ๋ ฌํ๊ณ , ํ์ ํ
์ด๋ธ๊ณผ๋ ํ ๊ฑด์ฉ ์์ฐจ์ ์ผ๋ก ์งํํ๋ NL ๋ฐฉ์์ ์กฐ์ธ
๋ฐฐ์น I/O๊ฐ ์๋ํ์ง ์์ผ๋ฉด ๋งจ ๋ฐ๊นฅ์ชฝ ORDER BY ์ ์ด ์์ด์ ์๊ด ์์
11g๋ถํฐ NL ์กฐ์ธ ๊ฒฐ๊ณผ์งํฉ์ด ํญ์ ์ผ์ ํ ์์๋ก ์ถ๋ ฅ๋๊ธฐ๋ฅผ ์ํ๋ค๋ฉด, ๋ฐฐ์น I/O ๊ธฐ๋ฅ์ด ์๋ํ์ง ๋ชปํ๋๋ก ํํธ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๋งจ ๋ฐ๊นฅ์ชฝ ORDER BY๊ฐ ํ์
์์ชฝ ORDER BY๋ Top N ์ฟผ๋ฆฌ๋ฅผ ๊ตฌํํ๊ธฐ ์ํ ๊ฒ์ผ๋ก ์ ๊ฑฐํ๋ฉด ์ ๋จ
์๊ฐ์ง๋จ
PRA_HST_STC_N1 : SALE_ORG_ID + STRD_GRP_ID + STRD_ID + STC_DT
SELECT *
FROM PRA_HST_STC A, ODM_TRMS B
WHERE A.SALE_ORG_ID = :sale_org_id
AND A.STRD_GRP_ID = B.STRD_GRP_ID
AND A.STRD_ID = B.STRD_ID
ORDER BY A.STC_DT DESC
SELECT *
FROM PRA_HST_STC A, ODM_TRMS B
WHERE A.SALE_ORG_ID = :sale_org_id
AND B.STRD_GRP_ID = A.STRD_GRP_ID
AND B.STRD_ID = A.STRD_ID
ORDER BY A.STC_DT DESC