EEALL@ONCE

๐Ÿ“Š ์ธ๋ฑ์Šค ๋ณธ๋ฌธ

Data๐Ÿ“Š/DB ์ดํ•ด

๐Ÿ“Š ์ธ๋ฑ์Šค

์˜ฌ์—ฃ์›์Šค 2023. 7. 21. 18:55
728x90

์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์ด์œ ?

์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ๊ณผ ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๋Š”๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค์˜ ์„ค์ •์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ํŠน์ • ์—ด(์นผ๋Ÿผ)์— ๋Œ€ํ•ด ๋น ๋ฅธ ๊ฒ€์ƒ‰ ๋ฐ ์ •๋ ฌ ์ž‘์—…์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. 
  1. ๋น ๋ฅธ ๊ฒ€์ƒ‰ ์†๋„: ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ธ๋ฑ์Šค ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋Š” ์—ด์„ ์‚ฌ์šฉํ•œ ๊ฒ€์ƒ‰์€ ์„ ํ˜• ๊ฒ€์ƒ‰๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๋ฉฐ, ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ์—์„œ๋„ ํšจ์œจ์ ์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์ •๋ ฌ ์†๋„ ํ–ฅ์ƒ: ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ •๋ ฌ ์ž‘์—…๋„ ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋Š” ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๋ฉด ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•˜๋Š” ํšŸ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค์–ด ๋” ๋น ๋ฅธ ์ •๋ ฌ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  3. ์กฐ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ: ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•  ๋•Œ, ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋Š” ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ์กฐ์ธํ•˜๋ฉด ํšจ์œจ์ ์ธ ์กฐ์ธ์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ธ์„ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋” ๋น ๋ฅด๊ฒŒ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ์ค‘๋ณต ์ œ๊ฑฐ ๋ฐ ๊ณ ์œ ์„ฑ ๋ณด์žฅ: UNIQUE INDEX๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์—ด์˜ ๊ณ ์œ ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  5. ํ…Œ์ด๋ธ” ํฌ๊ธฐ ์ตœ์ ํ™”: ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š”๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋”ฐ๋ผ์„œ ๋””์Šคํฌ ๊ณต๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์—๋„ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ์ƒ์„ฑํ•˜๋ฉด ์“ฐ๊ธฐ ์ž‘์—…(INSERT, UPDATE, DELETE)์˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ธ๋ฑ์Šค๋œ ์—ด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ์—๋„ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•  ๋•Œ์—๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠน์„ฑ๊ณผ ์ฟผ๋ฆฌ ํŒจํ„ด์„ ๊ณ ๋ คํ•˜์—ฌ ์ ์ ˆํ•˜๊ฒŒ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค ์ƒ์„ฑ 

CREATE INDEX index_name ON table_name (column_name);

  • index_name: ์ƒ์„ฑํ•  ์ธ๋ฑ์Šค์˜ ์ด๋ฆ„์„ ์ง€์ • / ์ธ๋ฑ์Šค ์ด๋ฆ„์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์—์„œ ๊ณ ์œ ํ•ด์•ผํ•œ๋‹ค! 
  • table_name: INDEX๋ฅผ ์ƒ์„ฑํ•  ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์„ ์ง€์ •
  • column_name: INDEX๋ฅผ ์ƒ์„ฑํ•  ์—ด(์นผ๋Ÿผ)์˜ ์ด๋ฆ„์„ ์ง€์ • / ํ•ด๋‹น ์—ด์˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ธ๋ฑ์Šค๊ฐ€ ์ƒ์„ฑ๋จ 

 

CREATE UNIQUE INDEX unique_index_name ON table_name (column_name);

UNIQUE ํ‚ค์›Œ๋“œ๋Š” ํ•ด๋‹น INDEX์˜ ๊ฐ’์ด ๊ณ ์œ ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธ

์ฆ‰, ์ค‘๋ณต๋œ ๊ฐ’์ด INDEX์— ์ €์žฅ๋˜์ง€ ์•Š์Œ! 

์ธ๋ฑ์Šค ์‚ญ์ œ

DROP INDEX index_name ON table_name;

  • index_name: ์‚ญ์ œํ•  ์ธ๋ฑ์Šค์˜ ์ด๋ฆ„์„ ์ง€์ • / ์ƒ์„ฑ๋œ INDEX์˜ ์ด๋ฆ„๊ณผ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • table_name: INDEX๊ฐ€ ์‚ญ์ œ๋  ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์„ ์ง€์ •

ํ…Œ์ด๋ธ”์„ ๋งŒ๋“œ๋Š” ์ˆœ๊ฐ„์—๋„ ์ธ๋ฑ์Šค ์„ค์ •์€ ๊ฐ€๋Šฅํ•˜๋‹ค!

ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์‹œ ์ธ๋ฑ์Šค ์„ค์ • 

INDEX ์ธ๋ฑ์Šค์ด๋ฆ„(์ธ๋ฑ์Šค ์ปฌ๋Ÿผ) 

<์˜ˆ์ œ>

CREATE TABLE Customers (
    customer_id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(100),
    INDEX idx_customers_email (email)
);

 

๋ฌผ๋ก  ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ์„ ํ•˜๋‚˜์˜ ์ธ๋ฑ์Šค๋กœ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค.

๋‹ค์ค‘ ์—ด ์ธ๋ฑ์Šค

CREATE INDEX idx_multi_columns ON table_name (column1, column2);

<์˜ˆ์ œ>

CREATE INDEX idx_multi_columns ON Products (category, manufacturer, stock_quantity);

 

 ์ธ๋ฑ์Šค๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ์ƒ์„ฑํ•˜๋ฉด ์“ฐ๊ธฐ ์ž‘์—…(INSERT, UPDATE, DELETE)์˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

๊ฒฐ๊ตญ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด, ์ •๋ณด๋ฅผ INSERT,UPDATE,DELETE ํ•ด์•ผํ•  ์ƒํ™ฉ์ด ์ƒ๊ธธํ…๋ฐ, ๊ทธ๋•Œ๋Š” ์ธ๋ฑ์Šค ํ™œ์„ฑํ™” ๋น„ํ™œ์„ฑํ™”๋ฅผ ์‚ฌ์šฉํ•˜์ž

์ธ๋ฑ์Šค๋ฅผ ํ™œ์„ฑํ™”(ENABLE) ๋˜๋Š” ๋น„ํ™œ์„ฑํ™”(DISABLE)

 

์ธ๋ฑ์Šค ํ™œ์„ฑํ™” (ENABLE):

ALTER TABLE table_name ENABLE KEYS;

์ธ๋ฑ์Šค ๋น„ํ™œ์„ฑํ™” (DISABLE):

ALTER TABLE table_name DISABLE KEYS;

์ธ๋ฑ์Šค๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ์ƒํ™ฉ์€ ์ผ์‹œ์ ์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์‚ฝ์ž…(INSERT)ํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ(UPDATE)ํ•˜๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉ! ๋‹ค๋งŒ, ์ธ๋ฑ์Šค๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋™์•ˆ์—๋Š” ๊ฒ€์ƒ‰ ์ž‘์—…(SELECT)์˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ๊ฒƒ... 

 

 

 

์ฐธ๊ณ ๋กœ BTREE๋ผ๋Š” ๊ฒƒ๋„ ์žˆ๋Š”๋ฐ... ์„ค๋ช… ์ฐธ๊ณ  ํ•˜์ž..

BTREE

INDEX `์ธ๋ฑ์Šค๋ช…` (`์ปฌ๋Ÿผ1`, `์ปฌ๋Ÿผ2`) USING BTREE

BTREE๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ผ๋ฐ˜์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. BTREE ์ธ๋ฑ์Šค๋Š” ์ฃผ๋กœ ๋น ๋ฅธ ๊ฒ€์ƒ‰๊ณผ ์ •๋ ฌ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(RDBMS)์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

BTREE ์ธ๋ฑ์Šค๋Š” ์ด์ง„ ํŠธ๋ฆฌ(Binary Tree)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ง„ ํŠธ๋ฆฌ๋Š” ๊ฐ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ ๋‘ ๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ–๋Š” ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ์ž๋ฃŒ ๊ตฌ์กฐ๋กœ, ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. BTREE ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฐ ๋ ˆ์ฝ”๋“œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ BTREE๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์—ด๋“ค์˜ ๊ฐ’์„ ์ด์ง„ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ •๋ ฌํ•˜์—ฌ ๋น ๋ฅธ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ๊ฐ€ ์ธ๋ฑ์Šค ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ, BTREE ์ธ๋ฑ์Šค๋Š” ์ด์ง„ ๊ฒ€์ƒ‰(Binary Search)์„ ์‚ฌ์šฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ฐพ์•„๋ƒ…๋‹ˆ๋‹ค.

BTREE ์ธ๋ฑ์Šค๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ์—์„œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ œ๊ณตํ•˜๋ฉฐ, ํŠนํžˆ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ํ…Œ์ด๋ธ”์—์„œ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ ์‹œ์— ์ธ๋ฑ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ํ…Œ์ด๋ธ”์—๋Š” ์ ์ ˆํ•œ ๊ณ ๋ ค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ข…ํ•ฉ์ ์œผ๋กœ, BTREE ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ธ๋ฑ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜๋กœ, ๋น ๋ฅธ ๊ฒ€์ƒ‰๊ณผ ์ •๋ ฌ์„ ์ง€์›ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ๊ธฐ์—ฌํ•ฉ๋‹ˆ๋‹ค.

728x90

'Data๐Ÿ“Š > DB ์ดํ•ด' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๐Ÿ“Š DAYOFWEEK  (0) 2023.07.28
๐Ÿ“Š GROUP BY  (0) 2023.07.28
๐Ÿ“Š IFNULL  (0) 2023.07.28
๐Ÿ“Šํ…Œ์ด๋ธ” ์† ๋ฐ์ดํ„ฐ ์‚ญ์ œํ•˜๊ธฐ  (0) 2023.07.21
๐Ÿ“Š์„œ๋ธŒ์ฟผ๋ฆฌ(subquery)  (0) 2023.07.06