[DB] Index

ํžˆํƒœํ•˜ํƒœยท2025๋…„ 3์›” 26์ผ

Database

๋ชฉ๋ก ๋ณด๊ธฐ
1/1

๐Ÿ“Œ ์‹ค๋ฌด์—์„œ ์ž์ฃผ ๋งˆ์ฃผ์น˜๋Š” DB ์ธ๋ฑ์Šค ์„ฑ๋Šฅ ์ด์Šˆ์™€ ์ตœ์ ํ™” ์ „๋žต

์„œ๋น„์Šค ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•ด ์ฟผ๋ฆฌ ํŠœ๋‹์„ ํ•  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ด ์ธ๋ฑ์Šค(Index)์ž…๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ "์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค๊ณ  ๋ฌด์กฐ๊ฑด ๋น ๋ฅด๋‹ค"๋Š” ์˜คํ•ด๋„ ๋งŽ์€๋ฐ์š”,
์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์œ ์˜ํ•  ์ , ๋ณตํ•ฉ ์ธ๋ฑ์Šค ์„ค๊ณ„, GROUP BY ์ฟผ๋ฆฌ ์ตœ์ ํ™”๊นŒ์ง€ ์‹ค์ œ ์ ์šฉ ๊ฐ€๋Šฅํ•œ ํŒ์œผ๋กœ ์ •๋ฆฌํ•ด๋ด…๋‹ˆ๋‹ค.

โœ… ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ๊ณ ๋ คํ•  ์ 
MariaDB(MySQL)์—์„œ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค:

CREATE INDEX idx_column1 ON your_table (column1);

๋˜๋Š”

ALTER TABLE your_table ADD INDEX idx_column1 (column1);

ํ•˜์ง€๋งŒ ๋Œ€์šฉ๋Ÿ‰ ํ…Œ์ด๋ธ”์˜ ๊ฒฝ์šฐ, ์ธ๋ฑ์Šค ์ถ”๊ฐ€ ์‹œ ํ…Œ์ด๋ธ” ์ž ๊ธˆ์ด ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์ˆ˜ ์ดˆ~์ˆ˜ ๋ถ„ ์ด์ƒ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ž‘์—…์ด CRUD ์„ฑ๋Šฅ์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€๋„ ํ•จ๊ป˜ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.



โœ… ์ธ๋ฑ์Šค๊ฐ€ CRUD์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ

ํ•ญ๋ชฉ์˜ํ–ฅ ์„ค๋ช…
SELECT์„ฑ๋Šฅ ๋Œ€ํญ ํ–ฅ์ƒ (์ธ๋ฑ์Šค ์‚ฌ์šฉ ์‹œ ํƒ์ƒ‰ ๋ฒ”์œ„ ์ถ•์†Œ)
INSERT์ธ๋ฑ์Šค ์ถ”๊ฐ€๋กœ ์“ฐ๊ธฐ ์†๋„ ์•ฝ๊ฐ„ ์ €ํ•˜ (์ธ๋ฑ์Šค๋„ ๊ฐ™์ด ๊ฐฑ์‹ ๋จ)
UPDATE/DELETE์กฐ๊ฑด์— ๋”ฐ๋ผ ์ธ๋ฑ์Šค๋ฅผ ์“ฐ๋ฉด ๋น ๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ธ๋ฑ์Šค๊ฐ€ ๋งŽ์„์ˆ˜๋ก ์ „์ฒด ์ฒ˜๋ฆฌ ๋น„์šฉ์€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ

์„ฑ๋Šฅ ์ธก์ • ๊ธฐ์ค€:

  • EXPLAIN SELECT ...๋กœ ์‹คํ–‰ ๊ณ„ํš ํ™•์ธ

  • SHOW PROFILE, SHOW STATUS ๋˜๋Š” ์‘๋‹ต ์‹œ๊ฐ„ ์ธก์ •

  • Using index, Using where, Using filesort, Using temporary ๋“ฑ ํžŒํŠธ ํ™•์ธ


โœ… ๋ณตํ•ฉ ์ธ๋ฑ์Šค: ์„ฑ๋Šฅ ์ตœ์ ํ™”์˜ ํ•ต์‹ฌ

๐Ÿ“Œ ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ž€? ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ์„ ์กฐํ•ฉํ•œ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค.
CREATE INDEX idx_name_age ON user (name, age);

์ด ์ธ๋ฑ์Šค๋Š” (name) ๋‹จ๋… ์กฐ๊ฑด ๋˜๋Š” (name, age) ์กฐ๊ฑด์—์„œ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

๐ŸŽฏ Leftmost Prefix Rule
๋ณตํ•ฉ ์ธ๋ฑ์Šค๋Š” ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ ์‚ฌ์šฉํ•˜๋Š” ์ฟผ๋ฆฌ์—์„œ๋งŒ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

WHERE ์กฐ๊ฑด์ธ๋ฑ์Šค ์‚ฌ์šฉ ์—ฌ๋ถ€
WHERE name = 'Tom'โœ… ์‚ฌ์šฉ ๊ฐ€๋Šฅ
WHERE age = 30โŒ ์‚ฌ์šฉ ์•ˆ ๋จ
WHERE name = 'Tom' AND age = 30โœ… ์ „์ฒด ์ธ๋ฑ์Šค ์‚ฌ์šฉ

์ด ์›์น™์„ ์ง€ํ‚ค์ง€ ์•Š์œผ๋ฉด ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค๊ณ ๋„ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์–ป์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.


โœ… ๋‹จ์ผ ์ธ๋ฑ์Šค vs ๋ณตํ•ฉ ์ธ๋ฑ์Šค

ํ•ญ๋ชฉ๋‹จ์ผ ์ธ๋ฑ์Šค๋ณตํ•ฉ ์ธ๋ฑ์Šค
๊ตฌ์กฐ์ปฌ๋Ÿผ ํ•˜๋‚˜๋‹น ํ•˜๋‚˜์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ ๊ฒฐํ•ฉ
์ฟผ๋ฆฌ ์‚ฌ์šฉ์„ฑ๋‹จ์ˆœ ์กฐ๊ฑด ์ฟผ๋ฆฌ ์ ํ•ฉ๋ณตํ•ฉ ์กฐ๊ฑด ์ฟผ๋ฆฌ์— ์œ ๋ฆฌ
์„ฑ๋Šฅ ์กฐ๊ฑด์ ์„์ˆ˜๋ก ๋น ๋ฆ„๋‹ค์–‘ํ•œ ์กฐ๊ฑด ์ตœ์ ํ™” ๊ฐ€๋Šฅ
๋ณ‘ํ•ฉ ๊ฐ€๋Šฅ์„ฑIndex Merge ํ™œ์šฉMerge ๋Œ€์‹  ํ•˜๋‚˜๋กœ ์ตœ์ ํ™”

์‹ค๋ฌด์—์„œ๋Š” JOIN, ORDER BY, GROUP BY๊นŒ์ง€ ๊ณ ๋ คํ•ด ์ปฌ๋Ÿผ ์ˆœ์„œ๋ฅผ ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.



โœ… GROUP BY ์ฟผ๋ฆฌ์™€ ์ธ๋ฑ์Šค์˜ ๊ด€๊ณ„
GROUP BY๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์ •๋ ฌ(SORT)์ด๋‚˜ ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ธ๋ฑ์Šค๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์—ฐ์‚ฐ์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์–ด ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ๋Œ์–ด์˜ฌ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โœ… ์ž˜ ์„ค๊ณ„๋œ ์ธ๋ฑ์Šค ์˜ˆ
CREATE INDEX idx_dept_job ON employee (department_id, job_title);

SELECT department_id, job_title, COUNT(*)
FROM employee
GROUP BY department_id, job_title;

์œ„ ์ฟผ๋ฆฌ๋Š” Using index for group-by ๋กœ ์‹คํ–‰๋˜๋ฉฐ, ๋ณ„๋„์˜ ์ •๋ ฌ ์—†์ด ์ธ๋ฑ์Šค ์ˆœ์„œ๋Œ€๋กœ ์ง‘๊ณ„๋ฉ๋‹ˆ๋‹ค.


โœ… ์‹ค๋ฌด ์ธ๋ฑ์Šค ์„ค๊ณ„ ์ „๋žต ์š”์•ฝ
  1. WHERE, JOIN, GROUP BY, ORDER BY ์ฟผ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ํŒŒ์•…

  2. ์ž์ฃผ ์“ฐ๋Š” ์ปฌ๋Ÿผ + ์„ ํƒ๋„ ๋†’์€ ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๋ณตํ•ฉ ์ธ๋ฑ์Šค ์„ค๊ณ„

  3. EXPLAIN, SHOW PROFILE, slow_query_log ๋“ฑ์„ ํ†ตํ•ด ์ธ๋ฑ์Šค ํ™œ์šฉ ์—ฌ๋ถ€ ํ™•์ธ

  4. Using index, Using filesort, Using temporary ๋“ฑ ํžŒํŠธ ๋ถ„์„

  5. ํ•„์š” ์—†๋Š” ์ธ๋ฑ์Šค๋Š” ์ •๋ฆฌํ•ด์„œ ์“ฐ๊ธฐ ์„ฑ๋Šฅ๋„ ๊ณ ๋ คํ•  ๊ฒƒ


โœ… ๋งˆ๋ฌด๋ฆฌ
์ธ๋ฑ์Šค๋Š” ์นผ๋‚ ์ฒ˜๋Ÿผ ๋‚ ์นด๋กœ์šด ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
์ž˜ ์“ฐ๋ฉด ๋Œ€๋‹จํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๋งŒ๋“ค์ง€๋งŒ, ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ๋‚จ๋ฐœํ•˜๋ฉด ์˜คํžˆ๋ ค ์“ฐ๊ธฐ ์„ฑ๋Šฅ ์ €ํ•˜, ๊ณต๊ฐ„ ๋‚ญ๋น„, ์œ ์ง€๋ณด์ˆ˜ ๋‚œ์ด๋„ ์ฆ๊ฐ€๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ํŒจํ„ด์„ ์ค‘์‹ฌ์œผ๋กœ ์„ค๊ณ„๋œ ์ธ๋ฑ์Šค๋Š” ์ตœ๊ณ ์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ˆ˜๋‹จ์ด๋ผ๋Š” ๊ฑธ ๊ธฐ์–ตํ•˜์„ธ์š”!

profile
์‹œ์ž‘์ด ๋ฐ˜์ด๋‹ค. ์ผ๋‹จ ์‹œ์ž‘ํ•ด๋ณด์ž.

0๊ฐœ์˜ ๋Œ“๊ธ€