MariaDB_Index

DBMS(Database Management System)의 인덱스(Index) 기능은 데이터베이스 테이블에서 데이터 검색 속도를 향상시키기 위한 중요한 기능입니다. 마치 책의 목차처럼, 인덱스는 데이터가 저장된 위치를 빠르게 찾을 수 있게 도와줍니다.

📌 인덱스(Index)의 기본 개념

  • 정의: 테이블의 한 열 또는 여러 열을 기준으로 정렬된 별도의 자료구조입니다.
  • 목적: 쿼리 성능 향상(특히 SELECT문의 검색 속도).
  • 구조: 일반적으로 B-Tree(균형 트리) 또는 Hash 기반으로 구성됩니다.

🔍 인덱스의 주요 기능

기능설명
빠른 검색WHERE 조건에 해당하는 데이터를 빠르게 조회합니다.
정렬 속도 향상ORDER BY, GROUP BY 구문의 성능을 높여줍니다.
중복 방지UNIQUE 인덱스를 사용하면 중복 데이터를 막을 수 있습니다.
조인 최적화JOIN 시 인덱스가 있을 경우 성능이 향상됩니다.

📂 인덱스의 종류

  1. 기본 인덱스 (Primary Index)
    • 기본키(Primary Key)에 자동 생성
    • 중복과 NULL 허용 안 됨
  2. 보조 인덱스 (Secondary Index)
    • 기본키가 아닌 컬럼에 수동 생성 가능
    • 중복과 NULL 허용
  3. 유니크 인덱스 (Unique Index)
    • 중복을 허용하지 않는 인덱스
  4. 복합 인덱스 (Composite Index)
    • 둘 이상의 컬럼을 조합한 인덱스
  5. 클러스터형 인덱스 (Clustered Index)
    • 테이블의 데이터 자체가 인덱스에 정렬됨 (보통 테이블당 1개)
  6. 비클러스터형 인덱스 (Non-clustered Index)
    • 별도의 인덱스 구조, 테이블의 실제 데이터와 별도 저장 가능
  7. 해시 인덱스 (Hash Index)
    • 해시 함수를 이용해 빠른 검색을 제공 (주로 메모리 기반 DB에서 사용)

⚠️ 인덱스의 단점

단점설명
쓰기 성능 저하INSERT, UPDATE, DELETE 시 인덱스를 갱신해야 하므로 성능 저하 가능
디스크 공간 증가인덱스가 별도의 저장 공간을 사용함
과도한 인덱스는 역효과너무 많은 인덱스는 오히려 성능을 악화시킬 수 있음

🛠️ 인덱스 사용 예시 (SQL)

sql

복사편집

— 인덱스 생성

CREATE INDEX idx_employee_name ON employees(name);

— 유니크 인덱스

CREATE UNIQUE INDEX idx_email_unique ON users(email);

— 인덱스 삭제

DROP INDEX idx_employee_name;

✅ 언제 인덱스를 사용하는 것이 좋은가?

  • 자주 검색되는 컬럼
  • WHERE, JOIN, ORDER BY, GROUP BY에 자주 사용되는 컬럼
  • 데이터의 분포가 다양한 컬럼 (선택도가 높은 컬럼)

MariaDB에서 **인덱스(index)**는 데이터베이스 테이블에서 데이터를 더 빠르게 검색하기 위해 사용되는 구조입니다. 인덱스는 책의 목차처럼 작동하여, 원하는 데이터를 빠르게 찾을 수 있도록 도와줍니다.

🔹 MariaDB 인덱스의 종류

  1. PRIMARY KEY
    • 테이블의 기본 키로, 자동으로 고유 인덱스가 생성됨
    • 하나의 테이블에 한 개만 존재 가능
    • NOT NULL과 UNIQUE 속성이 자동 부여됨

예:

sql
복사편집
CREATE TABLE users (

  id INT PRIMARY KEY,

  name VARCHAR(50)

);

  1. UNIQUE INDEX
    • 고유값을 유지해야 하는 컬럼에 사용
    • 중복된 값이 들어가는 것을 방지

예:

sql
복사편집
CREATE UNIQUE INDEX idx_email ON users(email);

  1. INDEX / KEY (일반 인덱스)
    • 자주 조회되는 컬럼에 생성하여 검색 성능 향상
    • 중복 허용

예:

sql
복사편집
CREATE INDEX idx_name ON users(name);

  1. FULLTEXT INDEX
    • 주로 텍스트 검색에 사용 (CHAR, VARCHAR, TEXT 타입 대상)
    • 자연어 검색(MATCH … AGAINST)에서 사용

예:

sql
복사편집
CREATE FULLTEXT INDEX idx_bio ON users(bio);

  1. SPATIAL INDEX
    • 지리공간 데이터 (GEOMETRY 타입 등)에 사용
    • GIS 기능과 함께 사용됨

예:

sql
복사편집
CREATE SPATIAL INDEX idx_location ON places(location);

🔹 인덱스 사용 시 주의사항

  • 인덱스는 검색을 빠르게 하지만, 쓰기(insert/update/delete) 성능은 떨어질 수 있음 (인덱스도 함께 수정되어야 하므로)
  • 너무 많은 인덱스를 생성하면 디스크 공간 낭비성능 저하가 발생할 수 있음
  • WHERE, JOIN, ORDER BY, GROUP BY에 자주 사용되는 컬럼에 인덱스를 생성하는 것이 일반적

🔹 인덱스 확인 및 관리

인덱스 확인:

sql
복사편집
SHOW INDEX FROM users;

인덱스 삭제:

sql
복사편집
DROP INDEX idx_name ON users;

위로 스크롤