INDEX
- INDEX는 데이터베이스에서 데이터를 더 빠르게 검색할 수 있도록 도와주는 구조입니다.
- 책의 목차와 같은 역할을 합니다.
- 책에서 원하는 내용을 찾으려면 처음부터 끝까지 읽는 대신, 목차를 보고 바로 해당 페이지로 갈 수 있죠.
- 데이터베이스에서도 인덱스를 사용하면 원하는 데이터를 훨씬 빠르게 찾을 수 있습니다.
- 인덱스의 지도 데이터를 사용하면, 테이블의 모든 데이터를 탐색하지 않고도 원하는 데이터를 빠르게 찾을 수 있습니다.
- 책의 목차와 같은 역할을 합니다.
- INDEX 동작 원리
- 데이터베이스는 테이블에서 인덱스를 생성하면, 특정 열(Column)에 대해 정렬된 구조를 별도로 유지합니다.
- 검색 요청이 들어오면, 전체 테이블을 탐색(Full Table Scan)하지 않고, 인덱스를 통해 바로 해당 데이터 위치를 찾아갑니다.
장단점
* 장점
- 검색 속도 향상 (R 성능 향상)
- 데이터를 더 빠르게 검색합니다.
- 대량의 데이터를 다룰 때 특히 유용합니다.
- 정렬 성능 개선
- ORDER BY, GROUP BY 같은 정렬 작업에서 성능이 좋아집니다.
- 중복 데이터 제거
- UNIQUE 인덱스를 사용하면 중복 데이터를 저장하지 못하도록 강제할 수 있습니다.
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(255) UNIQUE,
name VARCHAR(255)
);
* 단점
- 쓰기 속도 저하 (CUD 성능 저하)
- INSERT, UPDATE, DELETE 속도 하락
- 데이터를 삽입, 수정, 삭제할 때 INDEX를 업데이트해야 하므로 성능이 저하됩니다.
- INSERT, UPDATE, DELETE 속도 하락
- 추가 저장 공간 필요
- 인덱스 자체가 데이터베이스 내에서 추가로 공간을 차지합니다.
- 지도 데이터를 유지하기 위해 추가적인 저장 공간이 필요합니다.
- 복잡성 증가
- 너무 많은 인덱스를 사용하면, 관리가 어려워지고 데이터베이스 성능이 오히려 저하될 수 있습니다.
EXPLAIN
EXPLAIN은 INDEX의 효과를 분석하는 데 중요한 도구입니다.
쿼리 실행 계획에서 INDEX가 사용되었는지, 그리고 그 INDEX가 얼마나 효율적인지 확인할 수 있습니다.
- SQL 앞에 EXPLAIN 을 붙이면, 해당 SQL을 실행하기 위한 실행계획을 확인할 수 있다.
- 내가 만든 SQL이 실행될 때 INDEX 를 이용하는지 여부를 알 수 있다.
-- name 열에 인덱스 추가
CREATE INDEX idx_name ON customers(name);
-- 다시 EXPLAIN 실행
EXPLAIN SELECT * FROM customers WHERE name = 'John';
➡️ 출력
id | select_type | table | type | possible_keys | key | rows | Extra |
1 | SIMPLE | customers | ref | idx_name | idx_name | 10 | Using index |
- possible_keys = idx_name : 사용할 수 있는 인덱스가 idx_name으로 표시됨
- key = idx_name : 실제로 idx_name 인덱스가 사용됨
- type = ref : 조건에 맞는 데이터만 참조
- rows = 10 : 읽어야 하는 행이 1000 → 10으로 줄어들어 성능이 크게 향상
요약
INDEX에 대해 알아두기만 하고 데이터가 많아질 때 사용하면 된다.
출처
OpenAI의 ChatGPT (https://openai.com)
2024 프로그래머스 백엔드 데브코스 3기 4회차 수업
반응형
'DB > MySQL' 카테고리의 다른 글
SELECT문 실행 순서 (0) | 2024.12.30 |
---|---|
AUTO_INCREMENT (0) | 2024.12.29 |
DBMS를 사용하는 이유 feat. MySQL (1) | 2024.12.27 |
SQL (0) | 2024.12.26 |
CHAR vs VARCHAR (1) | 2024.12.15 |