데이터베이스/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 사용
컬럼 수정 ❌ 삭제 후 재생성 ❌ 삭제 후 재생성 ❌ 삭제 후 재생성

 

반응형