배움터  
  HOME > 배움터 > 무료강좌
무료강좌
 
액세스 2000, 김규경님의 데이터베이스 기초 다지기 - 4강. 데이터베이스 기초 4: 인덱스에 대하여, Access 2000
  


4강. 데이터베이스 기초 4: 인덱스에 대하여

인덱스의 정의: 키 값을 기반으로 하는 테이블에서 검색과 정렬 속도를 올리는 기능

관계형 데이터베이스에서는 정보들을 그 주제에 따라 여러 테이블에 나누어서 관리합니다. 이렇게 흩어져 있는 정보 테이블들은 고유한 기본키 값으로 서로 연결하고 원하는 정보를 가지고 있는 자료를 검색/추출해 냅니다. 하지만 이렇게 흩어진 자료들을 연결시키고 해당 정보가 있는가 검색/추출 작업에는 상당한 시간이 소요된다는 것을 수작업을 통해서도 알 수 있습니다. 따라서 이러한 작업의 속도를 빠르게 하기 위하여 관계형 데이터베이스는 인덱스를 이용합니다. 인덱스를 만드는 것은 테이블의 성능향상에 그 목적을 두고 있다는 것을 명심하시고 테이블의 각 필드가 얼마나 빈번히 이러한 작업에 쓰이는 가를 면밀히 분석하셔야 합니다.

테이블 성능의 최적화와 인덱스의 역할

Access 데이터베이스의 전체적인 성능을 최적화하려면 성능 분석 마법사에서 시작하는 것이 가장 좋습니다. 다음은 테이블의 성능을 향상시킬 수 방법과 인덱스의 역할에 대해 알아보도록 하겠습니다. 

데이터가 중복되지 않게 테이블을 구성한다. 

데이터 검색과 업데이트를 신속하게 하려면 우선 데이터베이스를 잘 만들어야 합니다. 기존의 테이블에 중복되는 데이터가 있으면 테이블 분석 마법사를 사용해 테이블을 관련 테이블로 나누어 데이터를 더욱 효율적으로 저장할 수 있습니다. 이 부분에 대한 내용은 '테이블의 정규화' 강의를 통해서 배우게 됩니다.

필드에 맞는 데이터 형식 선택한다. 

필드에 들어가는 자료와 맞도록 데이터 형식을 선택하면 데이터베이스 공간을 적게 차지하게 되며, 조인 작업도 향상됩니다. 가능하면 필드를 정의할 때 가장 작은 데이터 형식이나 필드의 데이터에 적당한 필드 크기를 선택하도록 합니다. 뿐만 아니라 적절한 데이터의 형식의 선택은 자료의 유효성을 높일 수 있다고 이미 언급한바 있습니다.

필드에 대해 인덱스를 만든다. 

조인의 양쪽 필드에 인덱스를 만들거나, 그러한 필드 간에 관계를 만들고 쿼리의 찾을 조건을 설정하면 쿼리 속도가 매우 향상됩니다. 찾기 대화 상자를 사용해 레코드를 찾을 때도 필드의 인덱스가 만들진 경우에는 훨씬 빨리 찾을 수 있습니다. 

인덱스의 기능

1. 인덱스의 장점

1) 키 값을 기초로 하여 테이블에서 검색과 정렬 속도를 향상시킵니다.
2) 질의나 보고서에서 그룹화 작업의 속도를 향상시킵니다.
3) 인덱스를 사용하면 테이블 행의 고유성을 강화시킬 수 있습니다. 
4) 테이블의 기본 키는 자동으로 인덱스 됩니다.
5) 필드 중에는 데이터 형식 때문에 인덱스 될 수 없는 필드도 있습니다. 
6) 여러 필드로 이루어진(다중 필드) 인덱스를 사용하면 첫 필드 값이 같은 레코드도 구분할 수 있습니다. 
참고로 액세스에서 다중 필드 인덱스는 최대 10개의 필드를 포함할 수 있습니다.

2. 인덱스의 단점

인덱스의 장점 뿐만 아니라 단점도 있어 인덱스를 모든 경우에 행하는 것은 아닙니다.
1) 인덱스를 만들면 .mdb 파일 크기가 늘어난다.
2) 여러 사용자 응용 프로그램에서의 여러 사용자가 한 페이지를 동시에 수정할 수 있는 병행성이 줄어든다.
3) 인덱스 된 필드에서 데이터를 업데이트하거나, 레코드를 추가 또는 삭제할 때 성능이 떨어집니다. 

따라서 어느 필드를 인덱스 해야 하는지 미리 시험해 보고 결정하는 것이 좋습니다. 인덱스를 추가하면 쿼리 속도가 1초 정도 빨라지지만, 데이터 행을 추가하는 속도는 2초 정도 느려지게 되어 여러 사용자가 사용하는 경우 레코드 잠금 문제가 발생할 수 있습니다. 

또, 다른 필드에 대한 인덱스를 만들게 되면 성능이 별로 향상되지 않을 수도 있습니다. 예를 들어, 테이블에 회사 이름 필드와 성 필드가 이미 인덱스 된 경우에 우편 번호 필드를 추가로 인덱스에 포함해도 성능이 거의 향상되지 않습니다. 만드는 쿼리의 종류와 관계 없이 가장 고유한 값을 갖는 필드만 인덱스 해야 합니다. 

인덱스로 사용할 필드

자주 검색하는 필드, 정렬하는 필드, 쿼리에서 다른 테이블에 있는 필드로 조인하는 필드에 주로 인덱스를 만듭니다. 그러나 추가 쿼리와 같은 실행 쿼리 작업이 수행되는 동안 여러 필드의 인덱스들이 업데이트되어야 할 때는 속도가 느려질 수 있습니다.

테이블의 기본 키에는 자동으로 인덱스가 만들어지지만, 데이터 형식이 OLE 개체인 필드에는 인덱스를 만들 수 없습니다. 

다음 사항이 모두 해당되는 경우에는 다른 필드에도 인덱스를 만들 수 있습니다. 

1) 필드의 데이터 형식이 텍스트, 숫자, 통화, 날짜/시간 중 하나인 경우 
2) 필드에 저장된 값을 찾는 작업이 예상되는 경우 
3) 필드의 값을 정렬하는 작업이 예상되는 경우 

필드에 저장될 값이 각양각색으로 서로 다를 경우. 필드 값이 비슷한 경우가 많을 때는 쿼리에 인덱스를 사용해도 속도가 크게 향상되지 않습니다. 

다중 필드 인덱스

두 개 이상의 필드를 조건으로 찾기나 정렬 작업을 많이 하면 그 필드들을 함께 인덱스로 지정할 수 있습니다. 예를 들어, 이름과 성을 다른 필드에서 저장해둔 경우 같은 쿼리에서 두 필드에 대해 조건을 설정하는 일이 많으면 두 필드에 대해 다중 필드 인덱스를 만듭니다.

다중 필드 인덱스로 테이블을 정렬하면 인덱스로 정의된 첫째 필드로 먼저 정렬하고 첫째 필드가 중복된 값을 가진 레코드가 있으면 인덱스로 정의된 둘째 필드로 계속 정렬합니다.
다중 필드 인덱스는 최대 10개의 필드를 포함할 수 있습니다.

레코드를 빠르게 찾고 정렬하는 인덱스 만들기

인덱스는 단일 필드로 만들 수도 있고(단일필드인덱스) 여러 개의 필드로 구성할 수도 있습니다(다중필드인덱스). 다중 필드로 이루어진 인덱스를 사용하면 첫 필드 값이 같을 지라도 다음 필드를 가지고 레코드를 구분할 수 있습니다.

단일 필드 인덱스 만들기

1. 테이블을 디자인 보기로 엽니다. 
2. 창의 상단에서 인덱스를 만들 필드를 클릭합니다. 
3. 창의 하단에서 인덱스/Indexed 속성 상자를 클릭한 다음 예(중복 가능) 예(중복 불가능)를 클릭합니다. 

04-01.gif(22414바이트)

다중 필드 인덱스 만들기

1. 디자인 보기에서 테이블을 엽니다. 
2. 도구 모음에서 인덱스 를 클릭합니다. 
3. 인덱스 이름 열의 첫 번째 빈 행에 인덱스 이름을 입력합니다. 인덱스 필드 이름 중 하나를 인덱스 이름으로 지정하거나 다른 이름을 사용할 수 있습니다. 
4. 필드 이름 열에서 화살표를 클릭하고 인덱스의 첫 번째 필드를 선택합니다. 
5. 필드 이름 열 옆의 행에서 인덱스의 두 번째 필드를 선택합니다. 이 때 해당 행의 인덱스 이름 열에는 아무 것도 입력하지 않습니다. 인덱스에 사용할 필드를 모두 선택할 때까지 이 단계를 반복합니다. 

인덱스 설정 창을 열어 봅시다.

04-03.gif(9566바이트)

참고] 기본 정렬 순서는 오름차순입니다. 해당 필드 데이터를 내림차순으로 정렬하려면 인덱스 창의 정렬 순서 열에서 내림차순을 선택합니다.

 

  목차 | 이전 | 다음