Search

์ธ๋ฑ์Šค

์ธ๋ฑ์Šค (Index)

์ •์˜

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
์ฑ…์˜ ์ƒ‰์ธ๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋ฉฐ, ํŠน์ • ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

ํŠน์ง•

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

์ฝ”๋“œ

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

-- ๋‹จ์ผ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค ์ƒ์„ฑ CREATE INDEX index_name ON table_name (column_name); -- ๋ณตํ•ฉ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค ์ƒ์„ฑ CREATE INDEX index_name ON table_name (column1, column2); -- UNIQUE ์ธ๋ฑ์Šค ์ƒ์„ฑ CREATE UNIQUE INDEX index_name ON table_name (column_name);
SQL
๋ณต์‚ฌ

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

-- ์ธ๋ฑ์Šค ์‚ญ์ œ DROP INDEX index_name ON table_name; -- ์—ฌ๋Ÿฌ ์ธ๋ฑ์Šค ์‚ญ์ œ ALTER TABLE table_name DROP INDEX index_name1, DROP INDEX index_name2;
SQL
๋ณต์‚ฌ
์ธ๋ฑ์Šค ์ •๋ณด ํ™•์ธ:
-- ํ…Œ์ด๋ธ”์˜ ์ธ๋ฑ์Šค ์ •๋ณด ํ™•์ธ SHOW INDEX FROM table_name;
SQL
๋ณต์‚ฌ

INDEX ์ƒ์„ฑ ์ „ํ›„์˜ ์„ฑ๋Šฅ ์ฐจ์ด๋ฅผ ํ™•์ธ

employees ํ…Œ์ด๋ธ”์— INDEX ์ƒ์„ฑ ์ „ํ›„์˜ ์„ฑ๋Šฅ ์ฐจ์ด๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ์•„๋ž˜ ์ ˆ์ฐจ๋Œ€๋กœ ์ง„ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

1. ์ธ๋ฑ์Šค ์ƒ์„ฑ ์˜ˆ์‹œ

์˜ˆ๋ฅผ ๋“ค์–ด last_name, gender ์ปฌ๋Ÿผ์œผ๋กœ ์ž์ฃผ ๊ฒ€์ƒ‰ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
CREATE INDEX idx_lastname_gender ON employees (last_name, gender);
SQL
๋ณต์‚ฌ

2. ์„ฑ๋Šฅ ์ฐจ์ด ํ™•์ธ ๋ฐฉ๋ฒ•

1๋‹จ๊ณ„: EXPLAIN ์‚ฌ์šฉ

EXPLAIN SELECT * FROM employees WHERE last_name = 'Smith' AND gender = 'M';
SQL
๋ณต์‚ฌ
โ€ข
์ธ๋ฑ์Šค ์ƒ์„ฑ ์ „: type์ด ALL(Full Table Scan)์ด๊ณ , key๊ฐ€ NULL์ผ ์ˆ˜ ์žˆ์Œ.
โ€ข
์ธ๋ฑ์Šค ์ƒ์„ฑ ํ›„: type์ด ref ๋˜๋Š” range ๋“ฑ์œผ๋กœ ๋ฐ”๋€Œ๊ณ , key์— idx_lastname_gender๊ฐ€ ํ‘œ์‹œ๋จ.

2๋‹จ๊ณ„: SHOW STATUS ๋˜๋Š” SHOW PROFILE

SET PROFILING = 1; -- ์ฟผ๋ฆฌ ์‹คํ–‰ SELECT * FROM employees WHERE last_name = 'Smith' AND gender = 'M'; -- ํ”„๋กœํŒŒ์ผ ํ™•์ธ SHOW PROFILE FOR QUERY 1;
SQL
๋ณต์‚ฌ
Duration, CPU usage, sending data ๋“ฑ์˜ ์‹œ๊ฐ„ ๋น„๊ต ๊ฐ€๋Šฅ.

3. ์„ฑ๋Šฅ ์ฐจ์ด ์ฒดํฌ ํฌ์ธํŠธ

ํ•ญ๋ชฉ
์ธ๋ฑ์Šค ์—†์Œ
์ธ๋ฑ์Šค ์žˆ์Œ
type
ALL (Full Table Scan)
ref / range ๋“ฑ (๋น ๋ฆ„)
rows
ํ…Œ์ด๋ธ” ์ „์ฒด
์ถ”๋ ค์ง„ ์†Œ์ˆ˜ ํ–‰
key
NULL
idx_lastname_gender ๋“ฑ ํ‘œ์‹œ
์‹คํ–‰ ์‹œ๊ฐ„
์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆผ
๋” ๋น ๋ฆ„

์‹ค์ „ ํŒ

โ€ข
์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์„์ˆ˜๋ก ์„ฑ๋Šฅ ์ฐจ์ด๋Š” ๋” ์ปค์ง‘๋‹ˆ๋‹ค.
โ€ข
์ธ๋ฑ์Šค ์ƒ์„ฑ์ด ๋ฌด์กฐ๊ฑด ์ข‹์ง€๋Š” ์•Š์Œ: INSERT/UPDATE ์„ฑ๋Šฅ ์ €ํ•˜, ๋””์Šคํฌ ๊ณต๊ฐ„ ์ฆ๊ฐ€ ๋“ฑ์˜ ๋ถ€์ž‘์šฉ๋„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.