MySQL

ํ’€ ์Šค์บ”(full scan)๊ณผ ์ธ๋ฑ์Šค ์Šค์บ”(index scan)์˜ ์ฐจ์ด์ 

567Rabbit 2024. 7. 25. 10:05

ํ’€ ์Šค์บ”(full scan)๊ณผ ์ธ๋ฑ์Šค ์Šค์บ”(index scan)์˜ ์ฐจ์ด์ 

 

 

ํ’€ ์Šค์บ”(full scan)์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ฒซ ๋ฒˆ์งธ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰๊นŒ์ง€ ๋ชจ๋“  ํ–‰์„ ํ›‘๋Š” ๊ฒƒ์ธ๋ฐ ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์ฐพ๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์ธ๋ฑ์Šค ์Šค์บ”(index scan)์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ํ–‰์„ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, abc@naver.com ๋ผ๋Š” ๊ณ„์ •์„ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ์‚ฌ๋žŒ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ–‰์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์„ ๋•Œ, ๊ทธ ์‚ฌ๋žŒ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด์„œ abc@naver.com๋ฅผ ์ธ๋ฑ์Šค๋กœ ๊ฑธ๋ฉด ๋” ๋น ๋ฅด๊ฒŒ ๊ทธ ์‚ฌ๋žŒ์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

 

ํ’€ ์Šค์บ” (full scan) ์€ ํ…Œ์ด๋ธ”์ด ์ž‘๊ณ , ๋ฐ์ดํ„ฐ ์ „์ฒด๋ฅผ ์กฐํšŒํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๊ณ , ์ธ๋ฑ์Šค ์Šค์บ”(index scan)์€ ๋Œ€์šฉ๋Ÿ‰ ํ…Œ์ด๋ธ”์—์„œ ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ ๋˜๋Š” ํ…Œ์ด๋ธ”์˜ ํŠน์ • ์—ด์— ๋Œ€ํ•ด ์ž์ฃผ ๊ฒ€์ƒ‰์ด๋‚˜ ์ •๋ ฌ์„ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์„ ๋นจ๋ฆฌ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ธ๋ฑ์Šค๋ฅผ ๋งŽ์ด ๋งŒ๋“ค์ˆ˜๋ก ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰์ด ๋Š˜์–ด๋‚˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ•œ๊ณ„๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

์ธ๋ฑ์Šค ์ฐฝ์—์„œ ์ธ๋ฑ์Šค๋ฅผ ์ ์šฉํ•˜๋ฉด, ์ธ๋ฑ์Šค๊ฐ€ ์ ์šฉ๋œ๋‹ค.

 

 

 

 

- ํƒ€์ž…์ด UNIQUE๋กœ ๋˜์–ด์žˆ๋Š” ๊ฒƒ์€ ์•„๋ž˜ ๊ธ€์„ ์ฐธ๊ณ ํ•œ๋‹ค

 

MySQL) Instargram - ์œ ๋‹ˆํฌ์™€ ์ด์ค‘์œ ๋‹ˆํฌ : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์ผ ์ธ๋ฌผ์„ ์ค‘๋ณต ํŒ”๋กœ์šฐ ํ•˜๋ฉด ์˜ค๋ฅ˜ ๋œจ๊ฒŒ ํ•˜๊ธฐ (tistory.com)

 

MySQL) Instargram - ์œ ๋‹ˆํฌ์™€ ์ด์ค‘์œ ๋‹ˆํฌ : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์ผ ์ธ๋ฌผ์„ ์ค‘๋ณต ํŒ”๋กœ์šฐ ํ•˜๋ฉด ์˜ค๋ฅ˜ ๋œจ๊ฒŒ ํ•˜

1. ์œ ๋‹ˆํฌ - ๋‹จ์ผ ์ปฌ๋Ÿผ์˜ ๊ฐ’์ด ์ค‘๋ณต๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค  username์€ ๊ทธ ์ž์ฒด๋กœ UQ(unique) ํ•ด์•ผํ•œ๋‹ค.  username์— UQ๋ฅผ ์ฒดํฌํ•˜๋ฉด, ๋™์ผํ•œ username์€ ์กด์žฌํ•  ์ˆ˜ ์—†๊ณ , ๊ฐ™์€ username์œผ๋กœ ํšŒ์›๊ฐ€์ž…ํ•˜๋ ค

codebunny99.tistory.com

 

 

 

**** ์ฃผ์˜ ****

 

ํƒ€์ž…์„ FULLTEXT๋กœ ํ•˜๋Š” ๊ฒƒ์€ ํ’€ ์Šค์บ”์ด ์•„๋‹ˆ๋ผ ์ธ๋ฑ์Šค ์Šค์บ”์ด๋‹ค!

 

 

 

ํ’€ํ…์ŠคํŠธ๊ฒ€์ƒ‰(full-text search)์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ๊ฒ€์ƒ‰ ์—”์ง„์—์„œ ๋ฌธ์„œ๋‚˜ ํ…์ŠคํŠธ์˜ ๋‚ด์šฉ์„ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š”

์ธ๋ฑ์Šค์ด๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ ํ’€ํ…์ŠคํŠธ ๊ฒ€์ƒ‰์„ MySQL๋กœ๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , Elasticsearch(์—˜๋ผ์Šคํ‹ฑ ๊ฒ€์ƒ‰์—”์ง„)์ด๋ผ๋Š” ๋ถ„์‚ฐ ๊ฒ€์ƒ‰ ์—”์ง„์„

๋Œ€๋ถ€๋ถ„์˜ ์„œ๋น„์Šค์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

 

 

 

์˜ˆ์‹œ๋ฅผ ํ†ตํ•œ ๋น„๊ต

 


ํ’€ ์Šค์บ”(full scan) ์˜ˆ์‹œ:

 

 

SELECT * FROM employees WHERE name = 'John';

 

- ์ด ์ฟผ๋ฆฌ๋Š” ๋ชจ๋“  ํ–‰์„ ์Šค์บ”ํ•˜์—ฌ name์ด 'John'์ธ ํ–‰์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

  1,000,000๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ–‰์„ ๋ชจ๋‘ ๊ฒ€์‚ฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

 

 

 


SELECT * FROM customers WHERE age > 30;

 

SELECT * FROM employees;

 

SELECT * FROM orders WHERE order_date > '2023-01-01';
 
SELECT * FROM products WHERE price > 100;

 

SELECT * FROM employees WHERE name = 'John';

 

 

 

 

์ธ๋ฑ์Šค ์Šค์บ”(index scan)  ์˜ˆ์‹œ:

 

 

CREATE INDEX idx_name ON employees(name);

SELECT * FROM employees WHERE name = 'John';

 

- name ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•œ ํ›„, ๋™์ผํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ name์ด 'John'์ธ ํ–‰์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์Šต๋‹ˆ๋‹ค.     

์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๊ฒ€์ƒ‰ ๋ฒ”์œ„๋ฅผ ์ขํž ์ˆ˜ ์žˆ์–ด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

 

 

 

CREATE INDEX idx_age ON customers(age);
SELECT * FROM customers WHERE age > 30;


CREATE INDEX idx_order_date ON orders(order_date);

SELECT * FROM orders WHERE order_date > '2023-01-01';

 

CREATE INDEX idx_customer_order ON orders(customer_id, order_date);

SELECT * FROM orders WHERE customer_id = 123 AND order_date > '2023-01-01';

 

CREATE INDEX idx_price ON products(price);

SELECT * FROM products WHERE price > 100;