์ธ๋ฑ์ค๋?
์ธ๋ฑ์ค๋ ์ผ๋ฐ ํ ์ด๋ธ์ด๋ ํด๋ฌ์คํฐ์์ ์ฐ์ฌ์ง๋ ์ ํ์ ์ธ ๊ฐ์ฒด๋ก์, ์ค๋ผํด
๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ๋ด์ ์ํ๋ ๋ ์ฝ๋๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์๊ฐ ์ ์๋๋ก ๋ง๋ค์ด์ง ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ค.
SQL ๋ช ๋ น๋ฌธ์ ์ฒ๋ฆฌ ์๋๋ฅผ ํฅ์์ํค๊ธฐ ์ํด์ ์ปฌ๋ผ์ ๋ํด์ ์์ฑํ๋ ์ค๋ผํด ๊ฐ์ฒด
์ธ๋ฑ์ค๋ ๋์คํฌ I/O๋ฅผ ์ค์ด๋ ๋ง์ ๋ฐฉ๋ฒ ์ค ํ๋.
์ตํฐ๋ง์ด์ ๊ฐ ์ต์ ์ ๊ฒฝ๋ก๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์์
์ตํฐ๋ง์ด์ ๋ SQL์ ๊ฐ์ฅ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์ํํ ์ต์ (์ต์ ๋น์ฉ)์ ์ฒ๋ฆฌ๊ฒฝ๋ก๋ฅผ ์์ฑํด์ฃผ๋
DBMS ๋ด๋ถ์ ํต์ฌ์์ง์ด๋ค.
์ธ๋ฑ์ค ํน์ฑ
- ์ธ๋ฑ์ค๋ ์ฐ๊ด๋ ๊ฐ์ฒด์ ๋ฐ์ดํฐ์ ๋ ผ๋ฆฌ์ ๋ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ ๋ฆฝ์ ์ธ ์คํค๋ง ๊ฐ์ฒด
- ํ ์ด๋ธ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ํฅ์ ์ฃผ์ง ์๊ณ ์ธ๋ฑ์ค๋ฅผ ์ญ์ ํ๊ฑฐ๋ ๋ง๋ค ์ ์๋ค.
- ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ ํ๋๋ง ์์ฑํ ์ ์๋ค.
- ํด๋ฌ์คํฐ๋ ๋์คํฌ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด์ ์กฐ์ธ์ด๋ ์์ฃผ ์ฌ์ฉ๋๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ๊ฐ์ ์์น์ ์ ์ฅ์ํค๋ ๋ฐฉ๋ฒ
์ธ๋ฑ์ค ๊ณ ๋ ค์ฌํญ
- ์ธ๋ฑ์ค๊ฐ ํญ์ ๋์ ์ฑ๋ฅ์ ๋ณด์ฅํ์ง ์๋๋ค.
- ์กฐ๊ฑด์ ์ ์ฌ์ฉํ๋ ์ปฌ๋ผ ์์์ ๋ฐ๋ผ ์ธ๋ฑ์ค์ ์ฌ์ฉ์ด ๋ฌ๋ผ์ง ์ ์๋ค.(๊ฒฐํฉ ์ธ๋ฑ์ค๋ ์ธ๋ฑ์ค ์ปฌ๋ผ ์์์ ์ ์ํด์ผ ํ๋ค.)
- INSERT,DELETE,UPDATE๊ฐ ์ผ๋ง๋ ์์ฃผ ์ผ์ด๋๋์ง ๊ณ ๋ คํด์ผ ํ๋ค.
- ์ธ๋ฑ์ค๋ ํ SQL ์คํ์ ์ ์ํฅ์ ์ค ์ ์๋ค. ํ ์ด๋ธ์ ํ๋์ ์ธ๋ฑ์ค๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๋ฉด ์ฟผ๋ฆฌ ์คํ ์๊ฐ์ด ๋๋ ค์ง ์ ์๋ค. ์ฆ, ์ ์คํํ๋ SQL์ด ์๋ก์ด ์ธ๋ฑ์ค๋ก ์ธํ์ฌ ๋๋ ค์ง๋ ๊ฒ์ด๋ค.
- ์ธ๋ฐ์ค๋ ์ถ๊ฐ์ ์ธ ์ ์ฅ ๊ณต๊ฐ์ ํ์๋ก ํ๋ค.
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ | ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ๋ง์์ผ ํ๋ ๊ฒฝ์ฐ |
WHERE ์ ์ด๋ JOIN์กฐ๊ฑด์ ์์ ์์ฃผ ์ฌ์ฉ๋๋ ์ปฌ๋ผ | ํ ์ด๋ธ์ ๊ด๋ฆฌ๋๋ ๋ฐ์ดํฐ ์์ด ์ ์ ๊ฒฝ์ฐ |
๊ฐ์ด ์์ฃผ ๋๋ฌผ๊ฒ ์กด์ฌํ๋ ์ปฌ๋ผ(NULL์ ํฌํจํ๋ ์ปฌ๋ผ์ด ๋ง์ ๊ฒฝ์ฐ) | WHERE๋ฌธ์ ํด๋น ์ปฌ๋ผ์ด ์์ฃผ ์ฌ์ฉ๋์ง ์์๋ |
ํ ์ด๋ธ์ ๊ด๋ฆฌ๋๋ ๋ฐ์ดํฐ ์์ด ๋ง๊ณ , ์ง์ํ ๋ ์ ์ฒด ํ์ 2~4% ๊ฒ์์ ๋์์ด ๋๋ ์ปฌ๋ผ | ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ์ ์ฒด ๋ฐ์ดํฐ์ 10~15% ์ด์์ผ๋ |
์์ฃผ ์กฐํฉ๋์ด ์ฌ์ฉ๋๋ ์ปฌ๋ผ์ ๊ฒฐํฉ ์ธ๋ฑ์ค๋ก ์์ฑ | ํ ์ด๋ธ์ DML ์์ ์ด ๋ง์ ๊ฒฝ์ฐ. ์ฆ ์ ๋ ฅ, ์์ , ์ญ์ ๋ฑ์ด ์์ฃผ ์ผ์ด๋ ๋ |
โถ ์ธ๋ฑ์ค๊ฐ ์ฌ์ฉ๋์ง ์๋ ๊ฒฝ์ฐ
- ์ธ๋ฑ์ค ์ปฌ๋ผ์ด ๋น๊ต๋๊ธฐ ์ ์ ๋ณํ์ด ์ผ์ด๋ ๊ฒฝ์ฐ
- ๋ถ์ ํ(NOT)์ผ๋ก ์กฐ๊ฑด์ ๊ธฐ์ ํ ๊ฒฝ์ฐ
- ์ธ๋ฑ์ค ์ปฌ๋ผ์ด NULL๋ก ๋น๊ต๋๋ ๊ฒฝ์ฐ
์ธ๋ฑ์ค ์ข ๋ฅ
-- B-Tree ์ธ๋ฑ์ค
CREATE INDEX ์ธ๋ฑ์ค๋ช
ON ํ
์ด๋ธ๋ช
(์ปฌ๋ผ๋ช
, ...);
-- ๋จ์ผ ์ธ๋ฑ์ค(Single Index) : ํ๋์ ์ปฌ๋ผ์ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ค๋ฅผ ๋ง๋๋ ๊ฒ
CREATE INDEX ์ธ๋ฑ์ค๋ช
ON ํ
์ด๋ธ๋ช
(์ปฌ๋ผ๋ช
);
-- ๊ฒฐํฉ ์ธ๋ฑ์ค(Composite Index) : ๋๊ฐ ์ด์์ ์ปฌ๋ผ์ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ค๋ฅผ ๋ง๋๋ ๊ฒ
CREATE INDEX ์ธ๋ฑ์ค๋ช
ON ํ
์ด๋ธ๋ช
(์ปฌ๋ผ๋ช
, ์ปฌ๋ผ๋ช
, ...);
-- ๊ณ ์ ์ธ๋ฑ์ค(Unique INdex) : ์ ์ผํ ๊ฐ์ ๊ฐ๋ ์ปฌ๋ผ์ ๋ํด์๋ง ์ธ๋ฑ์ค๋ฅผ ์ค์
CREATE UNIQUE INDEX ์ธ๋ฑ์ค๋ช
ON ํ
์ด๋ธ๋ช
(์ปฌ๋ผ๋ช
, ...);
-- Bitmap ์ธ๋ฑ์ค(Express๋ ์ง์ํ์ง ์์)
CREATE BITMAP INDEX ์ธ๋ฑ์ค๋ช
ON ํ
์ด๋ธ๋ช
(์ปฌ๋ผ๋ช
, ...);
-- ํจ์๊ธฐ๋ฐ ์ธ๋ฑ์ค
CREATE INDEX ์ธ๋ฑ์ค๋ช
ON ํ
์ด๋ธ๋ช
(ํจ์์(์ปฌ๋ผ๋ช
) | ์ฐ์ ์);
-- ์ญ๋ฐฉํฅ ์ธ๋ฑ์ค
CREATE INDEX ์ธ๋ฑ์ค๋ช
ON ํ
์ด๋ธ๋ช
(์ปฌ๋ผ๋ช
1,์ปฌ๋ผ๋ช
2, ...) REVERSE;
-- ๋ด๋ฆผ์ฐจ์ ์ธ๋ฑ์ค
CREATE INDEX ์ธ๋ฑ์ค๋ช
ON ํ
์ด๋ธ๋ช
(์ปฌ๋ผ๋ช
1,์ปฌ๋ผ๋ช
2, ... DESC);
B-Tree indexes
- ์ผ๋ฐ์ ์ธ ์ ํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค
- ๊ธฐ๋ณธ ํค ๋ฐ ์ ํ์ฑ์ด ๋์ ์ธ๋ฑ์ค์ ์ ํฉ
- ์ฐ๊ฒฐ๋ ์ธ๋ฑ์ค๋ก ์ฌ์ฉ๋๋ B-Tree ์ธ๋ฑ์ค๋ ์ธ๋ฑ์ค ๋ ์ปฌ๋ผ๋ณ๋ก ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ์ ์๋ค.
--B-Tree ์ธ๋ฑ์ค ์์ฑ
CREATE INDEX idx_emp_name ON emp(name);
--NONUINQUE
--์ธ๋ฑ์ค ํ์ธ
SELECT * FROM user_indexes WHERE table_name='EMP';
SELECT * FROM user_ind_columns WHERE table_name='EMP';
--์ธ๋ฑ์ค ์ญ์
DROP INDEX idx_emp_name;
๊ฒฐํฉ ์ธ๋ฑ์ค
- ๋ ๊ฐ ์ด์์ ์ปฌ๋ผ์ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ค๋ฅผ ๋ง๋๋ ๊ฒ
--๊ฒฐํฉ ์ธ๋ฑ์ค : ๋๊ฐ ์ด์์ ์ปฌ๋ผ์ผ๋ก ์ธ๋ฑ์ค ์์ฑ
SELECT empNO,name,sal,dept
FROM emp
WHERE name = '์ด์ํ' AND dept = '๊ฐ๋ฐ๋ถ';
--AND ์กฐ๊ฑด์ผ๋ก ๊ฒ์ํ๋ ๊ฒฝ์ฐ ๊ฒฐํฉ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๋ฉด ์ฑ๋ฅ์ ์ค์ํ ์ญํ ์ ํ๋ค.
--OR ์ฐ์ฐ์ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค์ง ์๋๋ค
--๊ฒฐํฉ ์ธ๋ฑ์ค ์์ฑ
CREATE INDEX idx_emp_comp ON emp(name,dept);
--CREATE INDEX idx_emp_comp ON emp(dept,name);
--๋ถ์์์ ํด๋น ์ด๋ฆ์ ๊ฒ์ํ๋ฏ๋ก
--์ด๋ฆ์์ ๋ถ์๋ฅผ ๊ฒ์ํ๋ ๊ฒ๋ณด๋ค ์๋๊ฐ ๋๋ฆฌ๋ค.
--์ฆ, ๋ถ์๋ฅผ ๋ง์กฑํ๋ ํ์ด ์ด๋ฆ์ ๋ง์กฑํ๋ ํ๋ณด๋ค ๋ง์ผ๋ฏ๋ก
ํจ์ ๊ธฐ๋ฐ ์ธ๋ฑ์ค
- ํจ์ ๊ธฐ๋ฐ ์ธ๋ฑ์ค๋ ํํ์์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค.
- B-Tree์ Bitmap ์ธ๋ฑ์ค๋ ํจ์ ๊ธฐ๋ฐ ์ผ ์ ์๋ค.
--ํจ์ ๊ธฐ๋ฐ ์ธ๋ฑ์ค
SELECT empNO,name,rrn
FROM emp
WHERE MOD(SUBSTR(rrn,8,1),2)=1;
--ํจ์ ๊ธฐ๋ฐ ์ธ๋ฑ์ค
CREATE INDEX idx_emp_fin ON emp (MOD(SUBSTR(rrn,8,1),2));
--์ธ๋ฑ์ค ์ญ์
DROP INDEX idx_emp_fin;
์ธ๋ฑ์ค ์ ๋ณด ์กฐํ
--์ธ๋ฑ์ค ์ํ ์กฐํ
ANALYZE INDEX idx_test_num VALIDATE STRUCTURE; --๋ถ์
SELECT * FROM index_stats WHERE name = 'IDX_TEST_NUM'; -- ์ํ ํ์ธ
SELECT (del_lf_rows_len / lf_rows_len)*100
FROM INDEX_stats
WHERE name='IDX_TEST_NUM'; --0์ ๊ฐ๊น์ฐ๋ฉด ์ข์ ์ํ
INDEX Rebuild
- ํ ์ด๋ธ์ ์ถ๊ฐ ๋ฐ ์ญ์ ๊ฐ ๋์ง๋ง, ์ธ๋ฑ์ค๋ ์ ๋ ฅ๋ง ๋๊ณ ์ญ์ ๋์ง ์๋๋ค.
- ์ฐ์์ ์ธ ๋ฐ์ดํฐ๊ฐ ๋ค ์ง์์ ธ์ ์ธ๋ฑ์ค ๋ธ๋ญ์ด ๋น๊ฒ๋๋ฉด ์ฌ์ฉ ๊ณต๊ฐ์ ์ญ์ ํ๊ณ ์ฌ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์๋ค.
--์ธ๋ฑ์คREBUILD
ALTER INDEX idx_test_num REBUILD;
ANALYZE INDEX idx_test_num VALIDATE STRUCTURE; --๋ถ์
ํํธ(hint)
-- โ ํํธ(hint)
---------------------------------------------------
--์ตํฐ๋ง์ด์ ์๊ฒ SQL๋ฌธ ์คํ์ ์ํ ๋ฐ์ดํฐ ์ค์บ๋ ๊ฒฝ๋ก, ์กฐ์ธ ๋ฐฉ๋ฒ๋ฑ์ ์๋ ค์ฃผ๊ธฐ ์ํด ์ฌ์ฉ
--ํ์
SELECT /*_hint_name)param)*/์ปฌ๋ผ,์ปฌ๋ผ FROM ํ
์ด๋ธ๋ช
;
--ํ์ด์ง ์ฒ๋ฆฌ
SELECT * FROM(
SELECT ROWNUM rnum,empNo,name FROM(
SELECT empNo,name
FROM emp
ORDER BY empNo DESC
) WHERE ROWNUM <= 30
)WHERE rnum >=21;
--ํํธ(hint)๋ฅผ ์ด์ฉํ ํ์ด์ง ์ฒ๋ฆฌ
SELECT rnum, empno, NAME FROM (
SELECT /*+ INDEX_DESC(emp PK_EMP_EMPNO)*/ ROWNUM rnum, empno, NAME
FROM emp
WHERE ROWNUM <= 30
)
WHERE rnum >= 21;
--INDEX+ASC,INDEX+DESC :๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ํํธ๋ก ์ธ๋ฑ์ค๋ฅผ ์์,์ญ์์ผ๋ก ์ด์ฉํ ์ง ์ง์
'๐ป > ORACLE' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
(29)[ORACLE] 12์ผ์ฐจ : PL/SQL - 5 (ํธ๋ฆฌ๊ฑฐ ๋ฐ ํจํค์ง) (1) | 2024.03.27 |
---|---|
(29)[ORACLE] 12์ผ์ฐจ : PL/SQL - 4 (์์ธ์ฒ๋ฆฌ) (0) | 2024.03.27 |
(29)[ORACLE] 12์ผ์ฐจ : PL/SQL - 3 (์ปค์์ ๋์ ์ฟผ๋ฆฌ) (0) | 2024.03.26 |
(28)[ORACLE] 11์ผ์ฐจ : PL/SQL - 2 (0) | 2024.03.25 |
(28)[ORACLE] 11์ผ์ฐจ : PL/SQL (1) | 2024.03.25 |