본문 바로가기

커맨드 명령

2.3.6 DROP INDEX


색인 삭제


/* 문법 */
DROP INDEX index_name
DROP INDEX table_name.index_name
DROP INDEX table_name ON index_name
 
/* 파라미터 */
index_name    -- 삭제할 색인 
cs

『DROP INDEX』를 실행하면 테이블의 색인이 삭제된다. DROP INDEX를 입력한 후, 삭제하고 싶은 

색인 이름을 지정한다. SQL Server에서는 색인 이름을 『테이블 이름.색인이름』의 형태로 표기한다.


Oracle에서는 색인 그 자체를 부여한다. Access에서는 『색인 이름 ON 테이블 이름』으로 표기한다.

DROP INDEX를 실행해도 그 기원이 된 테이블은 삭제되지 않는다. 그러나 색인이 없어지면, 

색인에 포함되어 있던 열을 조건으로 하는 쿼리의 성능이 떨어질 수 있다.




/* 사용 예 */
DROP INDEX idx
DROP INDEX foo.idx
DROP INDEX idx on foo
 
cs




◐ 색인, 2분 탐색법

색인을 생성해서 데이터베이스 서버의 검색처리 능력을 높일 수 있다.


다음 예를 생각해보자. 테이블 foo에 수만 건 이상의 데이터 행이 존재하고 있다고 가정한다.

테이블 foo의 열 a가 1045라는 데이터를 검색해 보자(SELECT * FROM foo WHERE a=1045).

만약 foo에 색인이 없는 경우 맨 처음의 행에서부터 a의 값이 1045인지를 조사한다.


이것을 행의 수만큼, 만약 3만행이 있다면 3만번 반복한다. 이와 같은 검색을 『테이블 스캔』

이라고 부른다. 테이블 foo의 a열에 대해서 색인이 생성되어 있는 경우에는 『2분 탐색법』

이라는 방법으로 a열의 값이 1045인 것을 찾아낸다.


2분 탐색법은 미리 순서대로 정렬된 데이터를 검색하는 방법으로, 처음부터 검색하는 것이 

아니라, 한가운데부터 검색하기 시작한다. 중간부분의 값과 검색하고 싶은 값을 비교해서

큰지 작은지를 판단한다. 클 경우에는 지금 검색한 부분보다 큰 쪽의 목적의 값이 있을

것이다. 그 다음 검색 범위를 반으로 나누어 같은 작업을 반복한다. 


1045가 456보다 크다고 판단되었기 때문에 456부터 9547까지의 범위가 대상이 된다.

한가운데 있는 3122와 비교한다.


2분 탐색의 예



이와 같이 절반씩 조사해 나가면 효율적으로 검색할 수 있다.

특히 검색해야 하는 데이터양이 많을 경우에는 큰 도움이 된다. 데이터베이스 서버는 

실제로는 훨씬 복잡한 처리를 하지만, 기본적으로는 이와 같은 방법으로 빠르게 검색한다.


2분 탐색법은 미리 분류된 데이터에 대해서만 적용할 수 있다. 즉, 색인을 생성한다는 것은

분류된 정보를 생성하는 것이다.


따라서 색인은 데이터베이스 서버의 디스크 용량을 소비하게 된다. 

그리고 데이터를 추가하거나 변경할 때, 색인도 변경해야 한다. 너무 많은 색인을 생성하면

출력은 빠르지만 INSERT나 UPDATE는 느려진다.


기본키는 색인의 역할도 하기 때문에, 기본키가 지정되어 있는 열에 대하여 색인을 생성할 필요는 

없다. 색인은 복수의 열을 포함할 수 있다. 어떤 쿼리의 성능을 향상시키기 위해 색인을 생성하는 것

이라면, 그 쿼리의 WHERE에서 사용되고 있는 모든 열에 대하여 색인을 생성하면 효과적이다.


쿼리가 실행될 때, 어떤 색인을 사용하는가를 조사하기 위해서는 『SHOWPLAN』 옵션을 설정해서

쿼리 램프를 표시한다.

'커맨드 명령' 카테고리의 다른 글

2.3.8 DROP VIEW  (0) 2018.11.11
2.3.7 CREATE VIEW  (0) 2018.11.11
2.3.5 CREATE INDEX  (0) 2018.11.10
2.3.4 TRUNCATE TABLE  (0) 2018.11.10
2.3.3 ALTER TABLE  (0) 2018.11.10