검색 속도가 100배 빨라지는 마법: 데이터베이스 인덱스(Index) 완벽 정리
1. 서론: 책의 '찾아보기'와 데이터베이스 우리가 두꺼운 전공 서적에서 특정 키워드를 찾을 때, 첫 페이지부터 마지막 페이지까지 넘기며 찾지는 않습니다. 보통 책의 가장 뒤에 있는 '찾아보기(Index)' 페이지를 확인해 해당 내용이 있는 쪽수로 바로 이동하죠. 데이터베이스도 마찬가지입니다. 수백만 건의 데이터 속에서 내가 원하는 정보를 눈 깜짝할 새에 찾아내는 기술, 바로 **인덱스(Index)**에 대해 알아보겠습니다. 2. 인덱스의 핵심 원리: B-Tree 알고리즘 데이터베이스 인덱스는 대부분 B-Tree(Balanced Tree) 자료구조를 기반으로 작동합니다. 작동 방식: 데이터를 정렬된 상태로 유지하며, 이진 탐색과 유사하게 탐색 범위를 절반씩 줄여나갑니다. 효율성: 수천만 개의 로우(Row)가 있어도 단 몇 번의 노드 이동만으로 원하는 데이터에 도달할 수 있습니다. 이는 앞서 배운 **시간 복잡도 관점에서 O(log n)**의 성능을 보장합니다. 3. 인덱스가 무조건 좋은 걸까? (Trade-off) 인덱스는 검색 속도를 비약적으로 높여주지만, 공짜는 아닙니다. 저장 공간: 인덱스 자체가 별도의 저장 공간을 차지합니다. CUD 성능 저하: 데이터가 추가(Insert), 수정(Update), 삭제(Delete)될 때마다 인덱스도 매번 다시 정렬하고 갱신해야 하므로 쓰기 성능은 오히려 떨어집니다. 결론: 무분별한 인덱스 생성은 오히려 독이 될 수 있습니다. 4. 인덱스를 타지 않는 쿼리: 왜 내 인덱스는 무시당할까? 인덱스를 만들어도 정작 실행 계획을 보면 **Full Table Scan(전체 스캔)**을 하는 경우가 있습니다. 인덱스 컬럼 가공: WHERE YEAR(create_date) = 2024 처럼 컬럼을 함수로 감싸면 인덱스를 사용하지 못합니다. OR 조건: 인덱스가 없는 컬럼과 OR로 묶이면 인덱스 탐색이 취소될 수 있습니다. LIKE 전방 일치: LIKE '%keyword'...