MySQL 테이블에서 더 이상 필요하지 않은 인덱스를 제거하려면 ALTER TABLE 문과 DROP INDEX 절을 함께 사용하면 됩니다. 이 글에서는 기본 문법부터 실제 예제를 통한 인덱스 삭제 과정까지 단계별로 살펴보겠습니다.
인덱스 제거 기본 문법
MySQL에서 특정 테이블의 인덱스를 삭제하는 기본 문법은 다음과 같습니다.
ALTER TABLE 테이블명 DROP INDEX `인덱스명`;
인덱스 이름에 공백이 포함된 경우 반드시 백틱(`)으로 감싸주어야 합니다.
실습 예제: 테이블 생성하기
먼저 실습에 사용할 샘플 테이블을 생성해 보겠습니다.
mysql> CREATE TABLE DemoTable1469
-> (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(40),
-> StudentAge int
-> );
Query OK, 0 rows affected (0.78 sec)
여기서 StudentId는 자동 증가(AUTO_INCREMENT)되는 기본 키(PRI)이며, StudentName과 StudentAge는 일반 컬럼입니다.
컬럼에 인덱스 추가하기
다음 쿼리로 StudentName 컬럼에 인덱스를 생성합니다.
mysql> CREATE INDEX `Student Name_Index` ON DemoTable1469(StudentName);
Query OK, 0 rows affected (0.33 sec)
Records: 0 Duplicates: 0 Warnings: 0
테이블 구조 확인하기
DESC 명령어로 테이블 구조를 확인해 보겠습니다.
mysql> DESC DemoTable1469;
실행 결과는 다음과 같습니다.
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| StudentId | int(11) | NO | PRI | NULL | auto_increment |
| StudentName | varchar(40) | YES | MUL | NULL | |
| StudentAge | int(11) | YES | | NULL | |
+-------------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
StudentName 컬럼의 Key 값이 MUL로 표시되는 것은 해당 컬럼에 인덱스가 설정되어 있음을 의미합니다.
인덱스 삭제 실행하기
이제 아래 쿼리를 사용해 생성했던 인덱스를 삭제합니다.
mysql> ALTER TABLE DemoTable1469 DROP INDEX `Student Name_Index`;
Query OK, 0 rows affected (0.23 sec)
Records: 0 Duplicates: 0 Warnings: 0
삭제 후 테이블 구조 재확인
인덱스가 정상적으로 제거되었는지 다시 한번 테이블 구조를 확인해 보겠습니다.
mysql> DESC DemoTable1469;
실행 결과는 다음과 같습니다.
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| StudentId | int(11) | NO | PRI | NULL | auto_increment |
| StudentName | varchar(40) | YES | | NULL | |
| StudentAge | int(11) | YES | | NULL | |
+-------------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
StudentName 컬럼의 Key 값이 비어 있는 것을 확인할 수 있습니다. 이는 인덱스가 성공적으로 삭제되었음을 의미합니다.
참고 사항
- PRIMARY KEY로 설정된 인덱스는 DROP INDEX로 삭제할 수 없으며, 별도의 DROP PRIMARY KEY 구문을 사용해야 합니다.
- 대용량 데이터가 있는 테이블에서 인덱스를 삭제하면 순간적으로 서버 부하가 발생할 수 있으므로 트래픽이 적은 시간대에 작업하는 것이 좋습니다.
- 인덱스를 삭제하면 해당 컬럼의 검색 속도가 느려질 수 있으므로, 쿼리 성능에 미치는 영향을 충분히 검토한 후 진행하세요.