MYSQL

MySQL 인덱스

0hee 2024. 6. 25. 14:47

MySQL 인덱스는 데이터베이스 테이블의 검색 성능을 향상시키기 위해 사용되는 데이터 구조입니다. 인덱스를 적절히 사용하면 쿼리의 성능을 크게 개선할 수 있습니다. MySQL에서 사용 가능한 주요 인덱스 종류와 생성 방법을 설명하겠습니다.

인덱스 종류

1. PRIMARY KEY:
   - 기본 키 인덱스는 테이블의 기본 키 열에 자동으로 생성됩니다. 기본 키는 고유하고 null 값을 가질 수 없습니다.
   - 예: `PRIMARY KEY (id)`

2. UNIQUE:
   - 고유 인덱스는 인덱스가 적용된 열의 값이 고유하도록 보장합니다. 동일한 값을 가질 수 없습니다.
   - 예: `UNIQUE (email)`

3. INDEX (또는 KEY):
   - 일반 인덱스는 중복 값을 허용하며, 테이블의 특정 열에 대한 검색 성능을 향상시킵니다.
   - 예: `INDEX (username)`

4. FULLTEXT:
   - 전체 텍스트 인덱스는 텍스트 검색에 최적화되어 있으며, 주로 `CHAR`, `VARCHAR`, `TEXT` 열에 사용됩니다.
   - 예: `FULLTEXT (content)`

5. SPATIAL:
   - 공간 인덱스는 지리적 데이터에 사용되며, `Geometry` 데이터 타입에 적용됩니다.
   - 예: `SPATIAL (location)`

인덱스 생성 방법

1. CREATE TABLE 문에서 인덱스 생성:
   - 테이블을 생성할 때 인덱스를 함께 정의할 수 있습니다.

   CREATE TABLE users (
       id INT AUTO_INCREMENT,
       username VARCHAR(50),
       email VARCHAR(100),
       PRIMARY KEY (id),
       UNIQUE (email),
       INDEX (username)
   );




2. ALTER TABLE 문에서 인덱스 추가:
   - 이미 존재하는 테이블에 인덱스를 추가할 수 있습니다.

   ALTER TABLE users ADD INDEX (username);
   ALTER TABLE users ADD UNIQUE (email);
   ALTER TABLE users ADD FULLTEXT (content);


  

3.  CREATE INDEX 문 사용:
   - 독립적인 CREATE INDEX 문을 사용하여 인덱스를 생성할 수 있습니다.

   CREATE INDEX idx_username ON users (username);
   CREATE UNIQUE INDEX idx_email ON users (email);
   CREATE FULLTEXT INDEX idx_content ON users (content);


   

인덱스 사용의 장단점

- 장점:
  - 쿼리 성능 향상: 데이터 검색 속도가 빨라집니다.
  - 정렬 및 그룹화: `ORDER BY`나 `GROUP BY` 절의 성능이 향상됩니다.

-  단점:
  - 디스크 공간 사용: 인덱스는 추가적인 저장 공간을 필요로 합니다.
  - 쓰기 성능 저하: 데이터 삽입, 업데이트, 삭제 시 인덱스도 갱신해야 하므로 성능이 저하될 수 있습니다.

인덱스를 적절히 설계하고 사용하는 것은 데이터베이스 성능 최적화의 중요한 요소입니다. 인덱스를 사용할 때는 쿼리 패턴과 데이터의 특성을 고려하여 효율적으로 설계하는 것이 중요합니다.