DB/MySQL

INDEX

annovation 2024. 12. 21. 10:02

INDEX

  1. INDEX는 데이터베이스에서 데이터를 더 빠르게 검색할 수 있도록 도와주는 구조입니다.
    • 책의 목차와 같은 역할을 합니다.
      • 책에서 원하는 내용을 찾으려면 처음부터 끝까지 읽는 대신, 목차를 보고 바로 해당 페이지로 갈 수 있죠.
      • 데이터베이스에서도 인덱스를 사용하면 원하는 데이터를 훨씬 빠르게 찾을 수 있습니다.
    • 인덱스의 지도 데이터를 사용하면, 테이블의 모든 데이터를 탐색하지 않고도 원하는 데이터를 빠르게 찾을 수 있습니다.
  2. INDEX 동작 원리
    • 데이터베이스는 테이블에서 인덱스를 생성하면, 특정 열(Column)에 대해 정렬된 구조를 별도로 유지합니다.
    • 검색 요청이 들어오면, 전체 테이블을 탐색(Full Table Scan)하지 않고, 인덱스를 통해 바로 해당 데이터 위치를 찾아갑니다.

장단점

 

* 장점

  1. 검색 속도 향상 (R 성능 향상)
    • 데이터를 더 빠르게 검색합니다.
    • 대량의 데이터를 다룰 때 특히 유용합니다.
  2. 정렬 성능 개선
    • ORDER BY, GROUP BY 같은 정렬 작업에서 성능이 좋아집니다.
  3. 중복 데이터 제거
    • UNIQUE 인덱스를 사용하면 중복 데이터를 저장하지 못하도록 강제할 수 있습니다.
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    email VARCHAR(255) UNIQUE,
    name VARCHAR(255)
);

 

 

* 단점

  1. 쓰기 속도 저하 (CUD 성능 저하)
    • INSERT, UPDATE, DELETE 속도 하락
      • 데이터를 삽입, 수정, 삭제할 때 INDEX를 업데이트해야 하므로 성능이 저하됩니다. 
  2. 추가 저장 공간 필요
    • 인덱스 자체가 데이터베이스 내에서 추가로 공간을 차지합니다.
    • 지도 데이터를 유지하기 위해 추가적인 저장 공간이 필요합니다.
  3. 복잡성 증가
    • 너무 많은 인덱스를 사용하면, 관리가 어려워지고 데이터베이스 성능이 오히려 저하될 수 있습니다.

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