# Table of Contents
# 인덱스
책 앞 쪽의 인덱스 페이지를 사용하여 원하는 페이지를 빠르게 찾을 수 있다. 이처럼 관계형 데이터베이스에도 인덱스(Index)
라는 개념이 존재한다. 인덱스는 정렬되어있기 때문에 이진탐색으로 빠르게 데이터를 탐색할 수 있다.
- 인덱스는 반드시 유일할 필요는 없다.
- 인덱스는 정렬되어야 한다.
# 인덱스 확인
SHOW INDEX FROM 테이블이름;
SHOW INDEX FROM member;
# Primary Key와 인덱스
Primary Key
를 지정하면 인덱스가 자동으로 생성된다.
CREATE TABLE member (
id BIGINT PRIMARY KEY AUTO_INCREMENT NOT NULL,
email VARCHAR(255) UNIQUE KEY NOT NULL,
name VARCHAR(255) NOT NULL
);
> SHOW INDEX FROM member;
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| member | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | YES | NULL |
| member | 0 | email | 1 | email | A | 0 | NULL | NULL | | BTREE | | | YES | NULL |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
# Unique Key와 인덱스
Unique Key
를 지정해도 인덱스가 자동으로 생성된다.
> SHOW INDEX FROM member;
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| member | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | YES | NULL |
| member | 0 | email | 1 | email | A | 0 | NULL | NULL | | BTREE | | | YES | NULL |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
# 인덱스 추가하기
직접 인덱스를 추가할 수도 있다.
CREATE INDEX idx_member_email_name ON member (email, name);