ํ ์ค์บ(full scan)๊ณผ ์ธ๋ฑ์ค ์ค์บ(index scan)์ ์ฐจ์ด์
ํ ์ค์บ(full scan)์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฒซ ๋ฒ์งธ๋ถํฐ ๋ง์ง๋ง๊น์ง ๋ชจ๋ ํ์ ํ๋ ๊ฒ์ธ๋ฐ ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐพ๋ ๋ฐ ๋ง์ ์๊ฐ์ด ์์๋๋ค. ๋ฐ๋๋ก ์ธ๋ฑ์ค ์ค์บ(index scan)์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด ํน์ ์กฐ๊ฑด์ ๋ง๋ ํ์ ๋น ๋ฅด๊ฒ ๊ฒ์ํ๋ ๋ฐฉ์์ด๋ค.
์๋ฅผ ๋ค์ด, abc@naver.com ๋ผ๋ ๊ณ์ ์ ๊ฐ์ง๊ณ ์๋ ์ฌ๋์ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ๊ฐ์ ํ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ ๋, ๊ทธ ์ฌ๋์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ธฐ ์ํด์ abc@naver.com๋ฅผ ์ธ๋ฑ์ค๋ก ๊ฑธ๋ฉด ๋ ๋น ๋ฅด๊ฒ ๊ทธ ์ฌ๋์ ๋ฐ์ดํฐ๋ง ์ฐพ์ ์ ์๋ ๊ฒ์ด๋ค.
ํ ์ค์บ (full scan) ์ ํ ์ด๋ธ์ด ์๊ณ , ๋ฐ์ดํฐ ์ ์ฒด๋ฅผ ์กฐํํด์ผ ํ๋ ๊ฒฝ์ฐ ๋๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด๋ ๊ฒ์ ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๊ณ , ์ธ๋ฑ์ค ์ค์บ(index scan)์ ๋์ฉ๋ ํ ์ด๋ธ์์ ํน์ ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ๋ ๋๋ ํ ์ด๋ธ์ ํน์ ์ด์ ๋ํด ์์ฃผ ๊ฒ์์ด๋ ์ ๋ ฌ์ ํ ๋ ์ฌ์ฉํ๋ค.
์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๋ฉด ๋ฐ์ดํฐ ๊ฒ์์ ๋นจ๋ฆฌ ํ ์ ์์ง๋ง ์ธ๋ฑ์ค๋ฅผ ๋ง์ด ๋ง๋ค์๋ก ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ด ๋์ด๋๊ฒ ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค ๋๋ ๋ฉ๋ชจ๋ฆฌ ํ๊ณ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค.
์ธ๋ฑ์ค ์ฐฝ์์ ์ธ๋ฑ์ค๋ฅผ ์ ์ฉํ๋ฉด, ์ธ๋ฑ์ค๊ฐ ์ ์ฉ๋๋ค.
- ํ์ ์ด UNIQUE๋ก ๋์ด์๋ ๊ฒ์ ์๋ ๊ธ์ ์ฐธ๊ณ ํ๋ค
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 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;