들어가기에 앞서
본 게시물은 'MySQL 8.0' 버전을 이용한 '명령 프롬프트(cmd)' 환경에서 작성한 코드를 토대로 만들어졌습니다.
인덱스는 데이터베이스(스키마), 뷰와 마찬가지로 변경이 불가능하므로 생성, 조회, 삭제하는 명령어만 알아놓도록 합니다.
CREATE INDEX - 인덱스 생성 및 정의
# student 테이블의 stdname 속성을 오름차순으로 정렬하는 name_idx 인덱스를 생성하고 UNIQUE 특성을 부여함
mysql> CREATE [UNIQUE] INDEX name_idx ON student(stdname [ASC]);
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
'UNIQUE'가 사용되면 중복되는 값이 없는 속성으로 인덱스를 생성한다는 뜻입니다.
'UNIQUE'가 사용되지 않으면 중복되는 값을 허용하는 속성으로 인덱스를 생성한다는 뜻입니다.
또한, stdname 뒤에 'ASC'가 쓰이거나 생략되면 오름차순으로 정렬한다는 뜻이며, 'DESC'가 쓰이면 내림차순으로 정렬한다는 뜻입니다.
대괄호([ ])로 묶여있는 내용들은 써주지 않아도 문제없는 옵션 요소입니다.
ADD INDEX - 인덱스 생성 및 정의
# student 테이블의 birthdate 속성을 오름차순으로 정렬하는 birthdate_idx 인덱스를 생성하고 UNIQUE 특성을 부여함
mysql> ALTER TABLE student ADD [UNIQUE] INDEX birthdate_idx(birthdate [ASC]);
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
위의 'CREATE INDEX'처럼 인덱스를 생성 및 정의하는 명령어로, 수행하는 기능이 완전히 동일함을 알 수 있습니다.
대괄호([ ])로 묶여있는 내용들은 써주지 않아도 문제없는 옵션 요소입니다.
SHOW INDEX - 테이블의 전체 인덱스를 조회
mysql> SHOW INDEX FROM student;
+---------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+---------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| student | 0 | PRIMARY | 1 | stdnum | A | 4 | NULL | NULL | | BTREE | | | YES | NULL |
| student | 0 | name_idx | 1 | stdname | A | 4 | NULL | NULL | | BTREE | | | YES | NULL |
| student | 0 | birthdate_idx | 1 | birthdate | A | 4 | NULL | NULL | YES | BTREE | | | YES | NULL |
| student | 1 | major | 1 | major | A | 4 | NULL | NULL | YES | BTREE | | | YES | NULL |
+---------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
4 rows in set (0.00 sec)
위에서 'CREATE INDEX', 'ADD INDEX' 외에 Key_name으로 'PRIMARY', 'major'가 조회되는 것을 볼 수 있습니다.
따라서 데이터베이스의 기본키와 외래키 또한 인덱스의 역할을 한다는 것을 조회되는 내용을 통해서 알 수 있습니다.
DROP INDEX - 인덱스 삭제
mysql> ALTER TABLE student DROP INDEX birthdate_idx;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
해당 테이블의 인덱스를 삭제하는 명령어입니다.
댓글