etc_index
ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค(Clustering Index)
ํด๋ฌ์คํฐํ ์ธ๋ฑ์ค๋ ํ๋ผ์ด๋จธ๋ฆฌ ํค(PK) ๊ฐ์ ์์์ ๋ฐ๋ผ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ๋ ฌ๋์ด ์ ์ฅ๋๋ ๋ฐฉ์์ ์๋ฏธํ๋ค.
๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ์ ํด๋น ๋ ์ฝ๋์ ๋ฌผ๋ฆฌ์ ์ธ ์์น๋ ๋ณ๊ฒฝ
ํ ์ด๋ธ ๊ตฌ์กฐ ์์ฒด๋ ์ผ๋ฐ B-Tree์ ๋น์ทํ์ง๋ง, ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค์ ๋ฆฌํ๋ ธ๋์ ๋ ์ฝ๋์ ๋ชจ๋ ์ปฌ๋ผ์ด ์ ์ฅ
InnoDB ํ ์ด๋ธ์ ๋ฐ๋์ ํด๋ฌ์คํฐํ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๋ฉฐ, ์๋์ ์ฐ์ ์์์ ๋ฐ๋ผ ํด๋ฌ์คํฐ๋ง ํค๋ฅผ ๊ฒฐ์ ํ๋ค.
๋ช ์์ ์ผ๋ก ์ง์ ๋ ํ๋ผ์ด๋จธ๋ฆฌ ํค(Primary Key)
์ฒซ ๋ฒ์งธ
NOT NULL
+ ์ ๋ํฌ ์ธ๋ฑ์ค(Unique Index).๋ด๋ถ์ ์ผ๋ก 6๋ฐ์ดํธ ํฌ๊ธฐ์ ์จ๊ฒจ์ง
ROW_ID
์ปฌ๋ผ ์์ฑ
๋ณด์กฐ ์ธ๋ฑ์ค๊ฐ PK๋ฅผ ์ฐธ์กฐํ๋ ๊ตฌ์กฐ
InnoDB์ ๋ชจ๋ ๋ณด์กฐ ์ธ๋ฑ์ค๋ ๋ฆฌํ ๋ ธ๋์ ๋ฐ์ดํฐ์ ๋ฌผ๋ฆฌ์ ์ฃผ์ ๋์ ํ๋ผ์ด๋จธ๋ฆฌ ํค ๊ฐ์ ์ ์ฅํ๊ฒ ๋๋๋ฐ, ์ด๋ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋๋ฌธ์ด๋ค.
๋ณด์กฐ ์ธ๋ฑ์ค๊ฐ ์ค์ ๋ ์ฝ๋ ์ฃผ์๋ฅผ ๊ฐ์ง
์ค์ ๋ ์ฝ๋ ์ฃผ์์ PK ๋ณ๊ฒฝ ์ ๋ ์ฝ๋์ ์ฃผ์๊ฐ ๋ณ๊ฒฝ ํ์(ํด๋ฌ์คํฐ๋ง ๋ ์ํ์ฌ์ผ ํ๊ธฐ ๋๋ฌธ)
๊ทธ๋๋ง๋ค ํด๋น ํ ์ด๋ธ์ ๋ชจ๋ ์ธ๋ฑ์ค์ ๋ํด ๋ณ๊ฒฝ ์์ ์ํ ํ์
์ค๋ฒํค๋ ๋ฐ์
PK๋ฅผ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ก ์ฌ์ฉํ๋ ์ด์
PK๋ฅผ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ก ์ฌ์ฉํ๋ ์ด์ ๋ ์ฝ๊ธฐ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํจ์ด๊ณ , ๊ทธ ์ฅ๋จ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ฅ์
ํ๋ผ์ด๋จธ๋ฆฌ ํค ๊ธฐ๋ฐ์ ๋ฒ์ ๊ฒ์(Range Scan) ์, ๋ฐ์ดํฐ๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ธ์ ํด ์์ด ๋น ๋ฅธ I/O ์ฑ๋ฅ ์ ๊ณต
๋ณด์กฐ ์ธ๋ฑ์ค๊ฐ ํ๋ผ์ด๋จธ๋ฆฌ ํค ๊ฐ์ ํฌํจํ๋ฏ๋ก, ์ฟผ๋ฆฌ์ ํ์ํ ๋ชจ๋ ์ปฌ๋ผ์ด ๋ณด์กฐ ์ธ๋ฑ์ค์ ํ๋ผ์ด๋จธ๋ฆฌ ํค์ ์๋ค๋ฉด ์ปค๋ฒ๋ง ์ธ๋ฑ์ค ์ฌ์ฉ ๊ฐ๋ฅ
๋จ์
๋ชจ๋ ๋ณด์กฐ ์ธ๋ฑ์ค๊ฐ PK ๊ฐ์ ํฌํจํ๋ฏ๋ก, PK์ ํฌ๊ธฐ๊ฐ ํฌ๋ฉด ๋ณด์กฐ ์ธ๋ฑ์ค์ ์ ์ฒด ํฌ๊ธฐ๋ ์์น
๋ฐ์ดํฐ ์ฝ์ ์ PK ๊ฐ์ ๋ฐ๋ผ ๋ฌผ๋ฆฌ์ ์ ์ฅ ์์น๊ฐ ๊ฒฐ์ ๋๋ฏ๋ก, ์์ฐจ์ ์ด์ง ์์ PK ๊ฐ(์: UUID)์ ์ฌ์ฉํ๋ฉด ํ์ด์ง ๋ถํ (Page Split)์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ์ฌ ์ฐ๊ธฐ ์ฑ๋ฅ์ด ์ ํ ๋ฐ์
๋ณด์กฐ ์ธ๋ฑ์ค๋ฅผ ํตํ ์กฐํ๋ PK๋ฅผ ์ด์ฉํ 2์ฐจ ์กฐํ๋ก ์ถ๊ฐ์ ์ธ ์ค๋ฒํค๋ ๋ฐ์
์ ๋ํฌ ์ธ๋ฑ์ค(Unique Index)
์ ๋ํฌ ์ธ๋ฑ์ค๋ ํน์ ์ปฌ๋ผ ๋๋ ์ปฌ๋ผ ์กฐํฉ์ ๋ํด ์ค๋ณต๋ ๊ฐ์ด ์ ์ฅ๋ ์ ์๋๋ก ๋ณด์ฅํ๋ ์ ์ฝ ์กฐ๊ฑด์ด์ ์ธ๋ฑ์ค๋ก, PK์๋ ๋ค์๊ณผ ๊ฐ์ ์ฐจ์ด๊ฐ ์๋ค.
ํ๋์ ํ ์ด๋ธ์ ์ฌ๋ฌ ๊ฐ ์์ฑ ๊ฐ๋ฅ
NULL
๊ฐ ํ์ฉ์ ๋ํฌ ์ธ๋ฑ์ค๋ ํด๋ฌ์คํฐํ ์ธ๋ฑ์ค๊ฐ ์๋, ๋นํด๋ฌ์คํฐํ(๋ณด์กฐ) ์ธ๋ฑ์ค๋ก ์์ฑ
์ ๋ํฌ ์ธ๋ฑ์ค๋ ์ผ๋ฐ ์ธ๋ฑ์ค์ ๋์ผํ ์ญํ ์ ์ํํ์ง๋ง, ์ฝ๊ธฐ์ ์ฐ๊ธฐ์ ์์ด์๋ ์ผ๋ฐ ์ธ๋ฑ์ค์ ๋ค์๊ณผ ๊ฐ์ ์ฐจ์ด์ ์ด ์กด์ฌํ๋ค.
์ฝ๊ธฐ: ์กฐํํ๋ ค๋ ๋ฐ์ดํฐ ๊ฑด์๊ฐ ๋ช ํํ ๊ฒฝ์ฐ, ์ผ๋ฐ์ ์ธ ๋ณด์กฐ ์ธ๋ฑ์ค์ ์ฑ๋ฅ์ ํฐ ์ฐจ์ด ์์
์ฐ๊ธฐ: ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ ๋๋ง๋ค ์ ์ผ์ฑ(Uniqueness)์ ๊ฒ์ฆ ๊ณผ์ ํ์
์ด ์ค๋ณต ์ฒดํฌ ๊ณผ์ ์ ์ถ๊ฐ์ ์ธ ๋์คํฌ ์ฝ๊ธฐ๋ฅผ ์ ๋ฐํ์ฌ ์ผ๋ฐ ๋ณด์กฐ ์ธ๋ฑ์ค๋ณด๋ค ์ฐ๊ธฐ ์ฑ๋ฅ ์ ํ
์ ๋ํฌ ์ธ๋ฑ์ค๋ ์ค๋ณต ์ฌ๋ถ๋ฅผ ์ฆ์ ํ์ธํด์ผ ํ๋ฏ๋ก, ์ฐ๊ธฐ ์ฑ๋ฅ์ ์ต์ ํํ๋ ์ฒด์ธ์ง ๋ฒํผ(Change Buffer) ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
์ค๋ณต ์ฒดํฌ๋ฅผ ์ํ ์ฝ๊ธฐ ์ ๊ธ๊ณผ ์ค์ ๋ฐ์ดํฐ ์ฝ์ ์ ์ํ ์ฐ๊ธฐ ์ ๊ธ์ด ๊ฒฝํฉํ์ฌ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ ์กด์ฌ
์ธ๋ํค(Foreign Key)
์ธ๋ ํค๋ ๋ ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํ์ฌ ๋ฐ์ดํฐ์ ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ ์ ์ฝ ์กฐ๊ฑด์ผ๋ก, ์ฐธ์กฐํ๋ ์ปฌ๋ผ์ ์๋์ผ๋ก ์ธ๋ฑ์ค๊ฐ ์์ฑ๋๋ค.
์ธ๋ํค์ ์ ๊ธ
InnoDB์์ ์ธ๋ ํค๋ ์ ๊ธ(Lock)๊ณผ ๋ฐ์ ํ ๊ด๋ จ์ด ์์ผ๋ฉฐ ๋ ๊ฐ์ง ์ค์ํ ํน์ง์ด ์๋ค.
ํ ์ด๋ธ์ ๋ณ๊ฒฝ(์ฐ๊ธฐ ์ ๊ธ)์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ์๋ง ์ ๊ธ ๋๊ธฐ ๋ฐ์
์ธ๋ํค์ ์ฐ๊ด๋์ง ์์ ์ปฌ๋ผ์ ๋ณ๊ฒฝ์ ์ต๋ํ ์ ๊ธ ๋๊ธฐ๋ฅผ ๋ฐ์์ํค์ง ์์
-- ์ํ ํ
์ด๋ธ ๋ฐ ๋ฐ์ดํฐ
CREATE TABLE tb_parent
(
id INT NOT NULL,
fd VARCHAR(100) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE tb_child
(
id INT NOT NULL,
pid INT DEFAULT NULL, # parent id
fd VARCHAR(100) DEFAULT NULL,
PRIMARY KEY (id),
KEY ix_parentid (pid),
CONSTRAINT child_ibfk_1 FOREIGN KEY (pid) REFERENCES tb_parent (id) ON DELETE CASCADE
);
INSERT INTO tb_parent
VALUES (1, 'parent-1'),
(2, 'parent-2');
INSERT INTO tb_child
VALUES (100, 1, 'child-1');
์์ ํ
์ด๋ธ์ ๋ณ๊ฒฝ ๋๊ธฐ
์์ ํ ์ด๋ธ์ ์ธ๋ ํค ์ปฌ๋ผ ๊ฐ์ ๋ณ๊ฒฝํ ๋, ๋ณ๊ฒฝํ๋ ค๋ ๊ฐ์ด ๋ถ๋ชจ ํ ์ด๋ธ์ ์ค์ ๋ก ์กด์ฌํ๋์ง ํ์ธํด์ผ ํ๋ค.
๋ถ๋ชจ ํ ์ด๋ธ ํ์ธ ๊ณผ์ ์์ ๋ถ๋ชจ ํ ์ด๋ธ์ ํด๋น ๋ ์ฝ๋์ ๊ณต์ ์ ๊ธ(S-Lock) ํ์
๋ค๋ฅธ ํธ๋์ญ์ ์ด ๋ถ๋ชจ ๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝ ์ค(X-Lock ๋ณด์ )์ด๋ผ๋ฉด ๋๊ธฐ ๋ฐ์
BEGIN;
UPDATE tb_parent SET fd='changed-2' WHERE id=2;
BEGIN;
UPDATE tb_child SET pid=2 WHERE id=100;
ROLLBACK;
์ปค๋ฅ์ 1 ๋๊ธฐ
COMMIT;
1๋ฒ ์ปค๋ฅ์ ์์ ๋ถ๋ชจ ํ ์ด๋ธ id 2์ธ ๋ ์ฝ๋์ ๋ํด ์ฐ๊ธฐ ์ ๊ธ ํ๋
2๋ฒ ์ปค๋ฅ์ ์์ ์์ ํ ์ด๋ธ์ ์ธ๋ํค ์ปฌ๋ผ(pid)์ pid 2๋ก ๋ณ๊ฒฝํ๋ ์ฟผ๋ฆฌ ์คํ
๋ถ๋ชจ ํ ์ด๋ธ์ ๋ณ๊ฒฝ ์์ ์ด ์๋ฃ๋ ๋๊น์ง 2๋ฒ ์ปค๋ฅ์ ์ ๋๊ธฐ
๋ถ๋ชจ ํ
์ด๋ธ์ ๋ณ๊ฒฝ ๋๊ธฐ
๋ถ๋ชจ ํ ์ด๋ธ์ ํค๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ๋ ์ฝ๋๋ฅผ ์ญ์ ํ ๋, ํด๋น ํค๋ฅผ ์ฐธ์กฐํ๋ ์์ ํ ์ด๋ธ์ ๋ ์ฝ๋๊ฐ ์๋์ง ํ์ธํด์ผ ํ๋ค.
๋ถ๋ชจ ํ ์ด๋ธ ๋ณ๊ฒฝ ์ ์์ ํ ์ด๋ธ์ ์ฐ๊ด ๋ ์ฝ๋์ ์ ๊ธ์ ์ค์
๋ค๋ฅธ ํธ๋์ญ์ ์ด ์์ ๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝ ์ค์ด๋ผ๋ฉด ๋๊ธฐ ๋ฐ์
BEGIN;
UPDATE tb_child SET fd='changed-100' WHERE id=100;
๋ถ๋ชจ id 1์ ์ฐธ์กฐํ๋ ์์ ํ
์ด๋ธ ๋ ์ฝ๋์ ์ ๊ทผ
BEGIN;
DELETE FROM tb_parent WHERE id=1;
ROLLBACK;
์ปค๋ฅ์ 1 ๋๊ธฐ
COMMIT;
1๋ฒ ์ปค๋ฅ์ ์์ ๋ถ๋ชจํค 1์ ์ฐธ์กฐํ๋ ์์ ํ ์ด๋ธ ๋ ์ฝ๋์ ๋ํด ์ฐ๊ธฐ ์ ๊ธ ํ๋
2๋ฒ ์ปค๋ฅ์ ์์ ๋ถ๋ชจ ํ ์ด๋ธ์ id 1์ ๋ํด ์ญ์ ํ๋ ์ฟผ๋ฆฌ ์คํ
์์ ํ ์ด๋ธ์ ๋ณ๊ฒฝ ์์ ์ด ์๋ฃ๋ ๋๊น์ง 2๋ฒ ์ปค๋ฅ์ ์ ๋๊ธฐ
๊ทธ ์ธ
์ ๋ฌธ ๊ฒ์ ์ธ๋ฑ์ค(Full-Text Index): ์ผ๋ฐ์ ์ธ B-Tree ์ธ๋ฑ์ค๋ก๋ ๊ฒ์์ด ์ด๋ ค์ด ์ฅ๋ฌธ ํ ์คํธ(๊ธฐ์ฌ ๋ณธ๋ฌธ ๋ฑ) ๋ด์ ๋จ์ด๋ ๊ตฌ๋ฌธ์ ํจ์จ์ ์ผ๋ก ๊ฒ์ํ๊ธฐ ์ํ ์ธ๋ฑ์ค
๊ณต๊ฐ ์ธ๋ฑ์ค(Spatial Index): ์์น ์ ๋ณด๋ ์ง๋ ๋ฐ์ดํฐ์ ๊ฐ์ 2์ฐจ์ ๊ณต๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ธ๋ฑ์ค(R-Tree ๊ธฐ๋ฐ)
๋ค์ค๊ฐ ์ธ๋ฑ์ค(Multi-Valued Index): ํ๋์ ๋ฐ์ดํฐ ๋ ์ฝ๋์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ด ํฌํจ๋ ์ ์๋
JSON
๋ฐฐ์ด๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ํ์ ์ ์ํด ์ค๊ณ๋ ์ธ๋ฑ์คํจ์ ๊ธฐ๋ฐ ์ธ๋ฑ์ค(Function-Based Index): ์ปฌ๋ผ์ ๊ฐ์ ๊ทธ๋๋ก ์ธ๋ฑ์ฑํ๋ ๊ฒ์ด ์๋๋ผ, ํน์ ํจ์๋ ํํ์์ ์ ์ฉํ ๊ฒฐ๊ณผ๋ฅผ ์ธ๋ฑ์ฑํ๋ ๋ฐฉ์
์ฐธ๊ณ ์๋ฃ
Last updated
Was this helpful?