인덱스 작성, 삭제
CREATE INDEX DROP INDEX
인덱스는 데이터베이스 객체의 하나로 DDL을 사용해서 작성하거나 삭제한다.
인덱스는 CREATE INDEX 명령 으로 만든다. 인덱스에 이름을 붙여 관리하는데, 데이터베이스 객체가 될지 테이블의 열처럼 취급될지는 데이터베이스 제품에 따라 다르다.
Oracle이나 DB2 등에서 인덱스는 스키마 객체가 된다. 따라서 스키마 내에 이름이 중복되지 않도록 지정해 관리한다.
SQL Server나 MySQL에서 인덱스는 테이블 내의 객체가 된다. 따라서 테이블 내에 이름이 중복되지 않도록 지정해 관리한다.
인덱스 작성시 해당 인덱스가 어느 테이블의 어느 열에 관한 것인지 지정할 필요가 있다. 이때 열은 복수로도 지정할 수 있다. (인덱스의 네임스페이스가 데이터베이스 제품마다 다르다)
CREATE INDEX
CREATE INDEX 인덱스명 ON 테이블명(열1, 열2, ...);
CREATE INDEX isample65 ON sample62(no);
인덱스는 DROP INDEX 명령으로 삭제한다. DROP 할때는 다른 객체와 동일하게 인덱스 이름만 지정하면 된다. 다만 테이블 내 객체로 작성하는 경우 테이블 이름도 지정한다.
DROP INDEX (스키마객체)
DROP INDEX 인덱스명
DROP INDEX(테이블 내 객체)
DROP INDEX 인덱스명 ON 테이블명
DROP TABLE로 테이블 삭제 시 인덱스도 자동 삭제된다.
인덱스 작성한 열을 WHERE 구로 조건을 지정하여 SELECT 명령으로 검색하면 처리속도가 향상된다. INSERT 명령의 경우 인덱스를 최신 상태로 갱신하는 처리가 늘어나므로 처리속도가 조금 떨어진다.
인덱스를 사용해 검색하는지를 확인하려면 EXPLAIN 명령을 사용
EXPLAIN
EXPLAIN SQL명령
EXPLAIN 뒤에 확인하고 싶은 SELECT 명령 등의 SQL 명령을 지정하면 된다. (실제로 실행 X)
데이터베이스 제품 의존형 명령이다. (이와 비슷한 명령을 지원한다. )
내부 처리에서는 SELECT 명령을 실행하기에 앞서 실행계획을 세운다. EXPLAIN 명령은 이 실행계획을 확인하는 명령이다.
실행게획에서는 인덱스의 유무뿐만 아니라 인덱스를 사용할 것인지 여부에 대해서도 데이터베이스 내부의 최적화 처리를 통해 판단한다. 이때 판단 기준으로 인덱스의 품질도 고려한다. 데이터의 종류가 적으면 적을수록 인덱스의 효율도 떨어진다. 반대로 서로 다른값으로 여러 종류의 데이터가 존재하면 그만큼 효율은 좋아진다.