CREATE TABLE users (
user_id INT PRIMARY KEY,
username VARCHAR(50)
);
CREATE INDEX idx_username ON users(username);
SELECT * FROM users WHERE username = 'zihwan';
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE,
order_status VARCHAR(20)
);
CREATE INDEX idx_order_date_status ON orders(order_date, order_status);
SELECT * FROM orders WHERE order_date BETWEEN '2024-01-01' AND '2024-01-31' AND order_status = '주문완료';
CREATE TABLE users (
user_id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE
);
-- 이메일 주소에 대한 고유 인덱스가 자동으로 생성됩니다.
INSERT INTO users (email) VALUES ('zihwan@google.com');
CREATE TABLE cocktail (
cocktail_id INT AUTO_INCREMENT PRIMARY KEY,
name_korean VARCHAR(50),
name_english VARCHAR(50),
ingredients varchar(300),
method varchar(500),
garnish varchar(100),
FULLTEXT(name_korean, name_english)
);
CREATE TABLE cocktail (
cocktail_id INT AUTO_INCREMENT PRIMARY KEY,
name_korean VARCHAR(50),
name_english VARCHAR(50)
ingredients varchar(300),
method varchar(500),
garnish varchar(100),
);
-- "name_korean" 열에 전체 텍스트 인덱스 추가
ALTER TABLE cocktail ADD FULLTEXT(name_korean);
-- "name_english" 열에도 전체 텍스트 인덱스 추가
ALTER TABLE cocktail ADD FULLTEXT(name_english);
-- 칵테일 이름(한글)로 검색
SELECT FROM cocktail WHERE MATCH(name_korean) AGAINST('블루 하와이' IN BOOLEAN MODE);
-- 칵테일 이름(영어)로 검색
SELECT FROM cocktail WHERE MATCH(name_english) AGAINST('Blue Hawaii' IN BOOLEAN MODE);
검색 속도 향상
인덱스를 사용하면 데이터베이스는 테이블을 훑지 않고 인덱스 트리를 사용하여 레코드를 빠르게 찾을 수 있습니다. 이로 인해 데이터 검색 속도가 향상됩니다.
쓰기 작업 성능 저하
인덱스를 생성하면 데이터 쓰기 작업(INSERT, UPDATE, DELETE)의 성능이 약간 저하됩니다. 인덱스를 수정해야 하기 때문입니다.
인덱스 선택
적절한 인덱스를 선택하는 것이 중요합니다. 과도한 인덱스 생성은 저장 공간을 낭비하고 쿼리 최적화에 오히려 악영향을 미칠 수 있습니다.