테이블의 모든 데이터 열 (Rows)의 자료는 처음부터 순차적으로 기록되지 않습니다. 즉, 정렬되어 입력되지 않습니다. 따라서 테이블에서 특정한 데이터를 찾기 위해서는 처음부터 끝까지 모든 자료를 검색해야 합니다. 전체 데이터를 검색하는 것은 매우 비효율적입 니다.

색인(index) 속성은 테이블에서 데이터를 검색할 때 속도를 개선하기 위해서 설정하는 속성입니다. 컬럼에 인덱스 속성을 설정하게 되면 빠른 자료 검색을 위해서 백과사전에서 색인을 만드는 것과 비슷합니다.


09.7.1 색인 생성


색인 생성은 CREATE INDEX 키워드를 이용하여 테이블/컬럼의 색인을 설정할 수 있습 니다.

| 쿼리 문법 |

CREATE INDEX 색인명 ON 테이블명 (컬럼명1, 컬럼명2...); 

대량의 데이터에 대해서 색인을 설정해 놓으면 빠른 검색 속도로 결과를 얻을 수 있습니다. 하지만 중복값이 많은 경우에는 색인 설정이 오히려 더 성능에 방해될 수도 있습 니다.


09.7.2 색인 확인


SHOW 명령을 통하여 테이블의 설정된 색인(index)을 확인할 수 있습니다.

| 예제 쿼리 |

SHOW INDEX FROM 테이블명; 

| 콘솔 실습 화면 |

mysql> show index from members;
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table   | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| members |          0 | PRIMARY  |            1 | Id          | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
1 row in set (0.00 sec)

09.7.3 색인 삭제


설정한 색인을 삭제할 수도 있습니다.

| 예제 쿼리 |

ALTER TABLE table_name DROP INDEX index_name; 


다중 인덱스


복수의 컬럼에 대해서 인텍스를 추가할 수 있습니다. 인덱스를 추가하게 되면 더 많은 저장공간을 필요로 하게 됩니다. 또한, Insert, Update 등과 같은 쿼리를 실행할때 인덱스 작업 추가로 소요가 됩니다.