데이터베이스/oracle
Index 생성, 삭제, 조회
chunkind
2023. 2. 27. 15:32
Oracle, MySQL, MariaDB, MSSQL에서의 인덱스 관련 명령어를 비교한 글입니다.
인덱스 생성, 삭제, 이름 변경, 컬럼 변경 등의 기본 문법을 각각 설명하겠습니다.
1. 인덱스 생성 (CREATE INDEX)
DBMS 기본 문법 예
Oracle | CREATE INDEX idx_emp_name ON emp(name); |
MySQL | CREATE INDEX idx_emp_name ON emp(name); |
MariaDB | CREATE INDEX idx_emp_name ON emp(name); |
MSSQL | CREATE INDEX idx_emp_name ON emp(name); |
* UNIQUE 인덱스가 필요할 경우:
CREATE UNIQUE INDEX idx_emp_email ON emp(email);
2. 인덱스 삭제 (DROP INDEX)
DBMS 문법 예
Oracle | DROP INDEX idx_emp_name; |
MySQL | DROP INDEX idx_emp_name ON emp; |
MariaDB | DROP INDEX idx_emp_name ON emp; |
MSSQL | DROP INDEX emp.idx_emp_name; 또는 DROP INDEX idx_emp_name ON emp; |
3. 인덱스 이름 변경 (RENAME INDEX)
DBMS 문법
Oracle | ALTER INDEX idx_old_name RENAME TO idx_new_name; |
MySQL / MariaDB | 지원 안 됨 → 인덱스를 삭제 후 새로 생성해야 함 |
MSSQL | EXEC sp_rename 'emp.idx_old_name', 'idx_new_name', 'INDEX'; |
4. 인덱스 컬럼 수정 (변경 방법)
인덱스에 포함된 컬럼을 수정하는 기능은 없음 → 기존 인덱스를 삭제하고 새로 생성해야 함.
-- 1. 기존 인덱스 삭제
DROP INDEX idx_emp_name ON emp;
-- 2. 새로운 컬럼으로 인덱스 재생성
CREATE INDEX idx_emp_name ON emp(name, dept);
* 대부분의 DBMS는 ALTER INDEX 컬럼 변경은 지원하지 않음.
5. 복합 인덱스 (다중 컬럼 인덱스)
CREATE INDEX idx_emp_name_dept ON emp(name, dept_id);
* 모든 DBMS에서 거의 동일하게 동작함.
단, 컬럼 순서가 중요함 → name이 먼저, dept_id는 조건이 name일 때만 활용 가능.
6. 기타 인덱스 유형 예시
유형 예시
비트맵 인덱스 (Oracle 전용) | CREATE BITMAP INDEX idx_emp_gender ON emp(gender); |
Fulltext 인덱스 (MySQL/MariaDB) | CREATE FULLTEXT INDEX idx_emp_resume ON emp(resume); |
Spatial 인덱스 (MySQL/MariaDB) | CREATE SPATIAL INDEX idx_map ON map(location); |
Clustered Index (MSSQL) | CREATE CLUSTERED INDEX idx_emp_id ON emp(id); |
전체 요약
기능 | Oracle | MySQL/MariaDB | MSSQL |
생성 | CREATE INDEX | 동일 | 동일 |
삭제 | DROP INDEX index_name | DROP INDEX index_name ON table | DROP INDEX table.index_name |
이름변경 | ALTER INDEX ... RENAME TO | ❌ 미지원 | sp_rename 사용 |
컬럼 수정 | ❌ 삭제 후 재생성 | ❌ 삭제 후 재생성 | ❌ 삭제 후 재생성 |
반응형