1. I/O ํ๋์ ํต์ฌ ์๋ฆฌ
๐ก Sequential Access ์ ํ๋ ๐
๐ก Random Access ๋ฐ์๋ ๐
2. Ramdom Access ์ต์ํ ํ๋
2.1 ์ธ๋ฑ์ค์ ์ปฌ๋ผ ์ถ๊ฐ
--==============================
-- ํ๋ ์
--==============================
-- ์ธ๋ฑ์ค: GENDER, SAL
WHERE EMP
AND GENDER = :gender -- Man
AND DNAME = :dname -- 10(Accounting)
--==============================
-- ํ๋ ํ
--==============================
-- ์ธ๋ฑ์ค: GENDER, SAL, DNAME
WHERE EMP
AND GENDER = :gender -- Man
AND DNAME = :dname -- 10(Accounting)
2.2 ๏ธ์ธ๋ฑ์ค๋ง ์ฝ๊ณ ์ฒ๋ฆฌ
SELECT ์ปฌ๋ผ๊ณผ WHERE ์ปฌ๋ผ์ด ๋ชจ๋ ์ธ๋ฑ์ค์ ๊ตฌ์ฑ๋์ด ์๋ค๋ฉด ์ธ๋ฑ์ค๋ง ์ฝ์ด(Index Only Scan) ๊ฒฐ๊ณผ ์งํฉ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
(๋ต์์ผ๋ก ์ ์ถํ ๊ฒฝ์ฐ ๊ฐ์ ์์ธ)
2.3 IOT์ Cluster Index
Oracle์ IOT(Index Organized Table)๋ Table Random Access๊ฐ ๋ฐ์ํ์ง ์๋๋ก ์ธ๋ฑ์ค ๊ตฌ์กฐ๋ก ์์ฑ๋ ํ ์ด๋ธ์ ๋๋ค.
1) ํฌ๊ธฐ๊ฐ ์๊ณ NL Join์ผ๋ก ๋ฐ๋ณต Lookupํ๋ ํ ์ด๋ธ 2) ํญ์ด ์ข๊ณ ๊ธด ํ ์ด๋ธ 3) ๋์ ๋ฒ์๋ฅผ ์ฃผ๋ก ๊ฒ์ํ๋ ํ ์ด๋ธ 4) ๋ฐ์ดํฐ ์ ๋ ฅ๊ณผ ์กฐํ ํจํด์ด ์๋ก ๋ค๋ฅธ ํ ์ด๋ธ์ ํ์ฉํ ์ ์์ต๋๋ค.
์ฅ์ | ๋จ์ |
---|---|
C.F๊ฐ ์ข์ | ์ฆ์ DML ์์ ์ ์ธ๋ฑ์ค ๋ถํ ๋ก ๋ถํ ๋ฐ์ |
Random Access ๋ฐฉ์์ด ์๋ Sequential Access ๋ฐฉ์์ผ๋ก ๋์ ๋ฒ์ ๊ฒ์ ์ ์ ๋ฆฌํจ | Direct Path Insert ๋ถ๊ฐ๋ฅ |
PK ์ธ๋ฑ์ค๋ฅผ ์ํ ๋ณ๋์ ์ธ๊ทธ๋จผํธ ์์ฑ์ด ๋ถํ์ํจ | - |
SQL Server์ Cluster Index๋ ํค ๊ฐ์ด ๋์ผํ ๋ ์ฝ๋๋ค์ ํ ๋ธ๋ก์ ๋ชจ์ด๋๋ก ์ ์ฅํฉ๋๋ค.
ํ ๋ธ๋ก์ ๋ชจ๋ ๋ด๊ธฐ ํ๋ ๊ฒฝ์ฐ ์๋ก์ด ๋ธ๋ก์ ํ ๋นํ์ฌ ์ฒด์ธ์ผ๋ก ์ฐ๊ฒฐํฉ๋๋ค.
Cluster Index๋ ๋์ ๋ฒ์ ๊ฒ์์ ๋งค์ฐ ์ ๋ฆฌ(C.F ์ข์)ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์๋ก์ด ๊ฐ์ด ์์ฃผ ์
๋ ฅ๋๊ฑฐ๋, ์์ ์ด ์์ฃผ ๋ฐ์ํ ๊ฒฝ์ฐ ๋ถํ๊ฐ ๊ทน์ฌํ ์ ์์ต๋๋ค.
3 Sequential Access ์ ํ๋ ํ๋
- ์ธ๋ฑ์ค ๋งค์นญ๋: ๋น๊ต ์ฐ์ฐ์ ์ข ๋ฅ์ ์ปฌ๋ผ ์์์ ๋ฐ๋ฅธ ์ธ๋ฑ์ค ๋ ์ฝ๋์ ๊ตฐ์ง์ฑ
- ์ธ๋ฑ์ค ๋งค์นญ๋: ์ธ๋ฑ์ค ์ ํ ์ปฌ๋ผ์ด ๋ฑ์น(=) ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ ๋ฐ์ํ๋ ๋นํจ์จ (์ธ๋ฑ์ค ๋งค์นญ๋)
- BETWEEN ์กฐ๊ฑด์ IN-LIST๋ก ๋ณ๊ฒฝํ์ ๊ฒฝ์ฐ ์ค์บ ํจ์จ์ฑ
- Index Skip Scan์ ์ด์ฉํ ๋นํจ์จ ํด์
- ๋ฒ์ ์กฐ๊ฑด ๋จ์ฉ์ ๋ฌธ์ ์
- ๋์ผ ์ปฌ๋ผ์ ๋ ๊ฐ์ ๋ฒ์ ์กฐ๊ฑด ์ฌ์ฉ ์ ์ ์์ฌํญ
- BETWEEN๊ณผ LIKE ๋น๊ต
- ์ ๋ถ ์ด๋ ฅ์ ์ธ๋ฑ์ค ์ค์บ ํจ์จ
- Access Predicate์ Filter Predicate
- Index Fragmentation
3.1 ์ธ๋ฑ์ค ๋งค์นญ๋
๊ฒฐํฉ ์ธ๋ฑ์ค ์ฐ์ ์์: ์ฌ์ฉ ๋น๋, ๋ฑ์น ์กฐ๊ฑด, ๋ถํฌ๋, Sort ์ฐ์ฐ ๋์ฒด
WHERE ์ ์์ ์ ๋ ์ปฌ๋ผ๋ถํฐ ์ฐ์๋ ํํ ์ปฌ๋ผ์ ๋ํ์ฌ equal(=) ๋๋ IN ์กฐ๊ฑด์ผ๋ก ๋น๊ตํ ๊ฒฝ์ฐ ๋งค์นญ๋๋ ๋์์ง๊ฒ ๋ฉ๋๋ค.
equal(=) ๋๋ IN ์กฐ๊ฑด์ด ์๋ ์กฐ๊ฑด ์ดํ๋ ๋ฌด์กฐ๊ฑด Check ์กฐ๊ฑด์ด ๋ฉ๋๋ค.
3.2 BETWEEN ์กฐ๊ฑด์ IN-LIST๋ก ๋ณ๊ฒฝํ์ ๊ฒฝ์ฐ ์ค์บ ํจ์จ์ฑ
IN-LIST๋ก ๋ณ๊ฒฝํ ๋์ ์ฃผ์์ฌํญ
- IN-LIST ๊ฐ์๊ฐ ๋ง์ง ์์์ผ ํฉ๋๋ค.
- ์์ง์ ํ์์ด IN-LIST ๊ฐ์ ๋งํผ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค์ ๋์ด๊ฐ ๋์ผ๋ฉด ๋ถ๋ฆฌํ ์ ์์ต๋๋ค.
์ฒดํฌ ์กฐ๊ฑด ์์ ์ปฌ๋ผ๋ค์ ๋ณ๋ณ๋ ฅ์ด ์ข์ ๊ฒฝ์ฐ BETWEEN ์กฐ๊ฑด์ด ์ ๋ฆฌํ ์ ์์ต๋๋ค.
3.3 Index Skip Scan์ ์ด์ฉํ ๋นํจ์จ ํด์
์ธ๋ฑ์ค ์ ๋ ์ปฌ๋ผ์ Distinct๊ฐ ๋ฎ๊ณ ํํ ์ปฌ๋ผ์ Cardinality๊ฐ ๋์ ๋ ์ ๋ฆฌํ ์ ์์ต๋๋ค.
3.4 ๋ฒ์ ์กฐ๊ฑด ๋จ์ฉ์ ๋ฌธ์ ์
๋๋์ ํ ์ด๋ธ์ ๋์ ๋ฒ์๋ก ๊ฒ์ํ ๋๋ ์ธ๋ฑ์ค Sequential Scan ๋นํจ์จ๋ก ์ธํด ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ๋ถํฌ๋์ ๋ฐ๋ผ ์ธ๋ฑ์ค ์ปฌ๋ผ์ ์ฌ์ฉํ ๋น๊ต ์ฐ์ฐ์๋ฅผ ์ ์คํ๊ฒ ๊ณ ๋ฅผ ํ์์ฑ์ด ์์ต๋๋ค.
-- ์ฃผ๋ฌธ์ผ์ ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ
SELECT PROD_CD
, ORDER_DATE
, ORDER_TYPE
FROM ORDER
WHERE PROD_CD = :PROD_CD
AND ORDER_DATE = :ORDER_DATE
AND ORDER_TYPE = :ORDER_TYPE;
-- ์ฃผ๋ฌธ์ผ์ ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ
SELECT PROD_CD
, ORDER_DATE
, ORDER_TYPE
FROM ORDER
WHERE PROD_CD = :PROD_CD
AND ORDER_TYPE = :ORDER_TYPE;
-- ๊ฐ๋ฐ์์ ํธ์์ ์ํด ORDER_DT ์กฐ๊ฑด์ LIKE๋ก ์ฒ๋ฆฌ
SELECT PROD_CD
, ORDER_DATE
, ORDER_TYPE
FROM ORDER
WHERE PROD_CD = :PROD_CD
AND ORDER_DATE LIKE :ORDER_DATE || '%'
AND ORDER_TYPE = :ORDER_TYPE;
-- ํ๋
SELECT PROD_CD
, ORDER_DATE
, ORDER_TYPE
FROM ORDER
WHERE ORDER_DATE IS NOT NULL
AND PROD_CD = :PROD_CD
AND ORDER_DT = :ORDER_DATE
AND ORDER_TYPE = :ORDER_TYPE
UNION ALL
SELECT PROD_CD
, ORDER_DATE
, ORDER_TYPE
FROM ORDER
WHERE ORDER_DATE IS NULL
AND PROD_CD = :PROD_CD
AND ORDER_TYPE = :ORDER_TYPE;
-- ํ๋: ์ฃผ๋ฌธ์ผ์ ์ปฌ๋ผ์ด NOT NULL ์ผ ๊ฒฝ์ฐ
SELECT PROD_CD
, ORDER_DATE
, ORDER_TYPE
FROM ORDER
WHERE PROD_CD = :PROD_CD
AND ORDER_DT = NVL(:ORDER_DATE, ORDER_DATE)
AND ORDER_TYPE = :ORDER_TYPE;
3.5 ๋์ผ ์ปฌ๋ผ์ ๋ ๊ฐ์ ๋ฒ์ ์กฐ๊ฑด ์ฌ์ฉ ์ ์ ์์ฌํญ
SELECT *
FROM ORDER
WHERE TRIM(ORDER_NO) <= 10000
AND ORDER_NO <= 10; -- Driving ์กฐ๊ฑด
3.6 BETWEEN๊ณผ LIKE ๋น๊ต
BETWEEN(โ202401โ AND โ202412โ)
์ ์ ํํ ์์๊ณผ ๋์ ์ ์ ์์ต๋๋ค. ๋ฐ๋ฉด LIKE(โ2024%โ โ โ2024121โ)
๋ ํน์ ๋ชจ๋ฅผ ๊ฐ์ ์ํด ์ถ๊ฐ์ ์ผ๋ก ์ค์บํ ์ ์์ต๋๋ค.
3.7 ์ ๋ถ ์ด๋ ฅ์ ์ธ๋ฑ์ค ์ค์บ ํจ์จ
์ต๊ทผ ๋ฐ์ดํฐ ์กฐํ: ์ข
๋ฃ์ผ์ + ์์์ผ์
๊ณผ๊ฑฐ ๋ฐ์ดํฐ ์กฐํ: ์์์ผ์ + ์ข
๋ฃ์ผ์
์ธ๋ฑ์ค ์์ ๋ถ๊ฐ: INDEX_DESC ํํธ ์ฌ์ฉ
์ค๊ฐ ์ง์ ์ ์กฐํ: ROWNUM <= 1 ์กฐ๊ฑด์ ํ์ฉ
4. ์ธ๋ฑ์ค์ ์ข ๋ฅ
4.1 B*Tree ์ธ๋ฑ์ค
BTree์ ๊ฐ ๋ ธ๋๋ ์ ๋ ฌ ์ํ๋ฅผ ์ ์งํฉ๋๋ค. ์๋ฃ๋ ์ค๋ณต๋์ง ์์ผ๋ฉฐ, Leaf Node๋ ๋์ผ ๋ ๋ฒจ์ ์์นํฉ๋๋ค. BTree์ B๋ Balanced๋ก ์ ๋ฆผ ํ์์ ์ ๊ฑฐํ์ฌ ๊ท ํ์ด ์ ์ง๋๋ โ๊ท ํ์ด์งํธ๋ฆฌโ๋ฅผ ์๋ฏธํฉ๋๋ค.
Index Skew: ์๊ณ์ด์ ์ผ๋ก ์ฆ๊ฐํ๋ ์ธ๋ฑ์ค์์ ๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ฅผ ๋๋์ผ๋ก ์ญ์ ํ๋ฉด ์ผ์ชฝ Leaf ๋ธ๋ก๋ค์ ํ ๋น์ด๋ฒ๋ฆฌ๋ ๋ฐ๋ฉด, ์ค๋ฅธ์ชฝ ๋ธ๋ก๋ค์ ๊ฝ ์ฐฌ ์ํ๊ฐ ๋ฉ๋๋ค. ํ ๋น ๋ธ๋ก๋ค์ ์ฌ์ฌ์ฉํ ์ ์์ง๋ง, ๋ค์ ์ฑ์์ง ๋๊น์ง ์ธ๋ฑ์ค ์ค์บ ํจ์จ์ด ์ ํ๋ฉ๋๋ค.
Index Sparse: ๋๋์ ์ญ์ ์์ ์ผ๋ก ์ธ๋ฑ์ค ๋ฐ๋๊ฐ ๋ฎ์ ์ํ์ ๋๋ค. Index Skew์ฒ๋ผ ๋ธ๋ก์ด ํ ๋น๋ฉด ๊ณง๋ฐ๋ก ๋ฐํ๋์ด ์ฌ์ฌ์ฉ๋์ง๋ง, Sparse ํ์์ ์ง์์ง ์๋ฆฌ์ ์ธ๋ฑ์ค ์ ๋ ฌ ์์์ ๋ฐ๋ผ ์๋ก์ด ๊ฐ์ด ์ ๋ ฅ๋์ง ์์ผ๋ฉด ์์ ์ฌ์ฌ์ฉ๋์ง ์์ ์๋ ์์ต๋๋ค.
์ธ๋ฑ์ค ์ฌ์์ฑ ์๊ฑด
- ์ธ๋ฑ์ค ๋ถํ ์ ์ํ ๊ฒฝํฉ ์ฆ๊ฐ
- ์์ฃผ ์ฌ์ฉ๋๋ ์ธ๋ฑ์ค ์ค์บ ํจ์จ ๊ฐ์ (ํนํ NL Join์์ ๋ฐ๋ณต ์์ธ์ค๋๋ ์ธ๋ฑ์ค์ ๋์ด ์ฆ๊ฐ)
- ๋๋์ delete ์์ ์ ์ํํ ์ดํ ๋ค์ ๋ ์ฝ๋๊ฐ ์ ๋ ฅ๋๊ธฐ๊น์ง ์ค๋ ๊ธฐ๊ฐ์ด ์์๋ ๋
- ์ด ๋ ์ฝ๋ ์๋ ์ผ์ ํ๋ฐ๋ ์ธ๋ฑ์ค๊ฐ ๊ณ์ ์ปค์ง ๋
4.2 ๋นํธ๋งต ์ธ๋ฑ์ค
Distinct ๋ฎ๊ณ ์ธ๋ฑ์ค๊ฐ ์ฌ๋ฌ ๊ฐ ํ์ํ ๋์ฉ๋ ํ
์ด๋ธ์ ์ ์ฉํฉ๋๋ค.
๋ค์ํ ๋ถ์๊ด์ ์ ๊ฐ์ง ํฉํธ์ฑ ํ
์ด๋ธ์ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค.
๋์ฉ๋ ๋ฐ์ดํฐ ๊ฒ์ ์ ์ฌ๋ฌ ๋นํธ๋งต ์ธ๋ฑ์ค๋ฅผ ๋์์ ํ์ฉํ์ฌ ์ฑ๋ฅ ํฅ์์ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
์ ํํ๋์ง ์์ ์์ ์ง์(ad-hoc query) ํ๊ฒฝ(DW)์ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
4.3 ํจ์๊ธฐ๋ฐ ์ธ๋ฑ์ค
CREATE INDEX IX_EMP_01 ON ORDER(UPPER(ename));
๋ฐ์ดํฐ ์
๋ ฅ, ์์ ์ ํจ์๋ฅผ ์ ์ฉํ๋ฏ๋ก ๋ค์ ๋ถํ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ฌ์ฉ๋ ํจ์๊ฐ User-Defined ํจ์์ผ ๊ฒฝ์ฐ ๋ถํ๊ฐ ๊ทน์ฌํ๋ฏ๋ก ์ฌ์ฉํด์๋ ์๋ฉ๋๋ค.
4.4 ๋ฆฌ๋ฒ์ค ์ธ๋ฑ์ค
์ผ๋ จ๋ฒํธ, ์ฃผ๋ฌธ์ผ์ ๊ฐ์ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๊ฒ ๋๋ฉด ์
๋ ฅ๋๋ ๊ฐ์ด ์์ฐจ์ ์ผ๋ก ์ฆ๊ฐํ๋ฉฐ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ๋ฆฌํ ๋ธ๋ก์๋ง ๋ฐ์ดํฐ๊ฐ ์ฆ๊ฐํฉ๋๋ค. ์ด๋ฐ ํ์์ Right Growing์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ๋ฆฌ๋ฒ์ค ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ์ฌ ๋ฆฌํ ๋ธ๋ก ์ ์ฒด์ ๊ณ ๋ฅด๊ฒ ๋ถ์ฐ์ํฌ ์ ์์ต๋๋ค.
์
๋ ฅ๋ ๊ฐ์ด ๊บผ๊พธ๋ก ๋ณํ๋์ด ์์ด Equal(=) ๊ฒ์๋ง ๊ฐ๋ฅํฉ๋๋ค.
4.2 ์ธ๋ฑ์ค ์ค๊ณ
๊ฒฐํฉ ์ธ๋ฑ์ค ๊ตฌ์ฑ์ ์ํ ๊ณต์
- ์กฐ๊ฑด์ ์ ํญ์ ์ฌ์ฉ๋๋๊ฐ?
- Equal(=) ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉ๋๋๊ฐ?
- ์นด๋๋๋ฆฌํฐ๊ฐ ์ข์๊ฐ?
- Sort Operation ์๋ต์ด ๊ฐ๋ฅํ๊ฐ?
์ถ๊ฐ์ ์ธ ๊ณ ๋ ค ์ฌํญ
- ์ฟผ๋ฆฌ ์ํ ๋น๋
- ์ ๋ฌด์ ์ค์๋
- ํด๋ฌ์คํฐ๋ง ํฉํฐ
- ๋ฐ์ดํฐ๋
- DML ๋ถํ
- ์ ์ฅ ๊ณต๊ฐ
- ์ธ๋ฑ์ค ๊ด๋ฆฌ ๋น์ฉ