에듀테크 프로젝트 대시보드
인덱스 기본
인덱스는 '정렬된 사본'입니다. 특정 조건의 행을 전체 스캔 없이 찾게 해주지만, 쓰기마다 갱신 비용이 듭니다.
WHERE · JOIN ON · ORDER BY 에 쓰이는 컬럼CREATE INDEX idx_exams_student_date ON exams (student_id, exam_date DESC);(student_id, exam_date) 인덱스는 WHERE student_id = ? 와 WHERE student_id = ? AND exam_date > ? 에 쓰임WHERE exam_date = ? 단독은 못 씀-- 활성 행만 색인 → 더 작고 빠름
CREATE INDEX idx_users_active ON users (last_login)
WHERE deleted_at IS NULL;
-- 함수 결과를 색인 (그 함수 그대로 WHERE 에 써야 적중)
CREATE INDEX idx_users_email_lower ON users (lower(email));
SELECT * FROM users WHERE lower(email) = 'a@x.com';-- Index Only Scan 유도: 필요한 컬럼을 인덱스에 포함
CREATE INDEX idx_orders_cover ON orders (user_id) INCLUDE (status, total);
-- 운영 테이블은 락 없이
CREATE INDEX CONCURRENTLY idx_big ON big_table (col);
DROP INDEX CONCURRENTLY idx_old;INVALID 인덱스가 남음(\d 로 확인 후 DROP 하고 재생성)