logo

데이터베이스의 인덱싱 – 세트 1

인덱싱은 쿼리를 수행하는 데 필요한 디스크 방문 횟수를 최소화하여 데이터베이스 성능을 향상시킵니다. 데이터베이스에서 데이터를 찾고 빠르게 액세스하는 데 사용되는 데이터 구조 기술입니다. 여러 데이터베이스 필드가 인덱스를 생성하는 데 사용됩니다. 테이블의 기본 키 또는 후보 키가 검색 키인 첫 번째 열에 중복됩니다. 데이터 검색 속도를 높이기 위해 값도 정렬된 순서로 유지됩니다. 데이터 정렬이 필요하지 않다는 점을 강조해야 합니다. 두 번째 열은 특정 키 값을 찾을 수 있는 디스크 블록의 주소를 보유하는 포인터 집합을 포함하는 데이터 참조 또는 포인터입니다.

데이터베이스의 인덱스 구조

인덱싱의 속성

  • 액세스 유형: 값 기반 검색, 범위 액세스 등 액세스 유형을 나타냅니다.
  • 액세스 시간: 특정 데이터 요소 또는 요소 집합을 찾는 데 필요한 시간을 나타냅니다.
  • 삽입 시간: 적절한 공간을 찾아 새로운 데이터를 삽입하는데 걸리는 시간을 말합니다.
  • 삭제 시간: 항목을 찾아서 삭제하고 인덱스 구조를 업데이트하는 데 걸리는 시간입니다.
  • 공간 오버헤드: 인덱스에 필요한 추가 공간을 나타냅니다.

데이터베이스의 인덱스 구조



리눅스 실행 cmd

일반적으로 데이터를 저장하기 위한 인덱싱 방법에 따라 파일 구성 메커니즘에는 두 가지 유형이 있습니다.

순차 파일 구성 또는 정렬된 인덱스 파일

여기서 인덱스는 값의 정렬된 순서를 기반으로 합니다. 이는 일반적으로 빠르고 보다 전통적인 유형의 저장 메커니즘입니다. 이러한 정렬된 또는 순차 파일 구성은 데이터를 조밀하거나 희박한 형식으로 저장할 수 있습니다.

  • 밀도 지수
    • 데이터 파일의 모든 검색 키 값에는 색인 레코드가 있습니다.
    • 이 레코드에는 검색 키와 해당 검색 키 값이 있는 첫 번째 데이터 레코드에 대한 참조가 포함되어 있습니다.

밀도 지수

  • 희소 인덱스
    • 색인 레코드는 데이터 파일의 일부 항목에 대해서만 나타납니다. 각 항목은 그림과 같이 블록을 가리킵니다.
    • 레코드를 찾으려면 찾고 있는 검색 키 값보다 작거나 같은 가장 큰 검색 키 값을 가진 인덱스 레코드를 찾습니다.
    • 인덱스 레코드가 가리키는 레코드에서 시작하여 원하는 레코드를 찾을 때까지 파일의 포인터를 따라(즉, 순차적으로) 진행합니다.
    • 필요한 액세스 수=log2(n)+1, (여기서 n=인덱스 파일이 획득한 블록 수)

희소 인덱스

해시 파일 구성

인덱스는 버킷 범위에 균일하게 배포되는 값을 기반으로 합니다. 값이 할당되는 버킷은 해시 함수라는 함수에 의해 결정됩니다. 인덱싱에는 주로 세 가지 방법이 있습니다.

인터페이스 란 무엇입니까?
  • 클러스터형 인덱싱 : 두 개 이상의 레코드가 동일한 파일에 저장되는 경우 이러한 유형의 저장을 클러스터 인덱싱이라고 합니다. 클러스터 인덱싱을 사용하면 동일한 것에 관련된 여러 레코드를 한 곳에 저장하고 두 개 이상의 테이블(레코드)을 자주 조인할 수 있으므로 검색 이유 비용을 줄일 수 있습니다.
    클러스터링 인덱스는 정렬된 데이터 파일에 정의됩니다. 데이터 파일은 키가 아닌 필드에서 정렬됩니다. 경우에 따라 인덱스는 각 레코드에 대해 고유하지 않을 수 있는 기본 키가 아닌 열에 생성됩니다. 이러한 경우 레코드를 더 빨리 식별하기 위해 두 개 이상의 열을 그룹화하여 고유한 값을 얻고 그로부터 인덱스를 생성합니다. 이 방법을 클러스터링 인덱스라고 합니다. 기본적으로 유사한 속성을 가진 레코드를 그룹화하고 이러한 그룹화에 대한 색인을 형성합니다.
    예를 들어, 매 학기마다 공부하는 학생들은 함께 그룹화됩니다. 1학기 학생, 2학기 학생, 3학기 학생 등으로 구분됩니다.

클러스터형 인덱싱

  • 기본 색인화: 이는 검색 키에 따라 데이터를 정렬하고 데이터베이스 테이블의 기본 키를 사용하여 인덱스를 생성하는 Clustered Indexing의 한 유형입니다. 이는 인덱싱의 기본 형식입니다. 순차 파일 구성 . 기본 키는 고유하고 정렬된 방식으로 저장되므로 검색 작업 성능이 매우 효율적입니다.
  • 비클러스터형 또는 보조 인덱싱 : 비클러스터형 인덱스는 데이터가 어디에 있는지 알려줍니다. 즉, 데이터가 실제로 저장된 위치에 대한 가상 포인터 또는 참조 목록을 제공합니다. 데이터는 인덱스 순서대로 물리적으로 저장되지 않습니다. 대신 데이터는 리프 노드에 존재합니다. 예를 들어. 책의 목차 페이지입니다. 각 항목은 저장된 정보의 페이지 번호나 위치를 제공합니다. 여기에 있는 실제 데이터(책의 각 페이지에 대한 정보)는 정리되어 있지 않지만 데이터 포인트가 실제로 어디에 있는지에 대한 순서가 지정된 참조(목차 페이지)가 있습니다. 비클러스터형 인덱스에서는 데이터가 물리적으로 구성되어 있지 않기 때문에 희소 정렬이 불가능하므로 밀집된 정렬만 가능합니다.
    포인터를 더 따라가서 데이터를 추출하려면 약간의 추가 작업이 필요하기 때문에 클러스터형 인덱스에 비해 더 많은 시간이 필요합니다. 클러스터형 인덱스의 경우 데이터는 인덱스 바로 앞에 존재합니다.
비클러스터형 인덱싱

비클러스터형 인덱싱

미니맥스 알고리즘
  • 다단계 인덱싱: 데이터베이스 크기가 커지면 인덱스도 커집니다. 인덱스는 주 메모리에 저장되므로 단일 수준 인덱스는 여러 디스크 액세스로 저장하기에는 크기가 너무 커질 수 있습니다. 다중 레벨 인덱싱은 기본 블록을 여러 개의 작은 블록으로 분리하여 동일한 블록을 단일 블록에 저장할 수 있도록 합니다. 외부 블록은 데이터 블록을 가리키는 내부 블록으로 나누어집니다. 이는 더 적은 오버헤드로 주 메모리에 쉽게 저장할 수 있습니다.

다단계 인덱싱

인덱싱의 장점

  • 향상된 쿼리 성능: 인덱싱을 사용하면 데이터베이스에서 데이터를 더 빠르게 검색할 수 있습니다. 데이터베이스는 열에 인덱스를 생성하여 특정 값이나 값 모음과 일치하는 행을 신속하게 검색할 수 있으므로 쿼리 수행에 소요되는 시간이 최소화됩니다.
  • 효율적인 데이터 액세스: 인덱싱은 데이터 검색에 필요한 디스크 I/O 양을 줄여 데이터 액세스 효율성을 향상시킬 수 있습니다. 데이터베이스는 자주 방문하는 열에 대한 인덱스를 생성하여 메모리에 있는 해당 열에 대한 데이터 페이지를 유지 관리할 수 있으므로 디스크에서 읽어야 하는 요구 사항이 줄어듭니다.
  • 최적화된 데이터 정렬: 인덱싱은 정렬 작업의 성능도 향상시킬 수 있습니다. 정렬에 사용되는 열에 인덱스를 생성하면 데이터베이스는 전체 테이블을 정렬하지 않고 대신 관련 행만 정렬할 수 있습니다.
  • 일관된 데이터 성능: 인덱싱은 데이터베이스의 데이터 양이 증가하더라도 데이터베이스가 일관되게 작동하도록 보장하는 데 도움이 됩니다. 인덱싱이 없으면 테이블의 행 수가 증가함에 따라 쿼리 실행 시간이 더 오래 걸릴 수 있지만 인덱싱은 거의 일관된 속도를 유지합니다.
  • 고유한 것으로 인덱싱된 열에 고유한 값만 삽입되도록 함으로써 인덱싱을 활용하여 데이터 무결성을 보장할 수도 있습니다. 이렇게 하면 쿼리나 보고서를 수행할 때 문제가 발생할 수 있는 중복 데이터가 데이터베이스에 저장되는 것을 방지할 수 있습니다.

전반적으로 데이터베이스의 인덱싱은 쿼리 성능 향상, 효율적인 데이터 액세스, 최적화된 데이터 정렬, 일관된 데이터 성능 및 데이터 무결성 강화에 상당한 이점을 제공합니다.

인덱싱의 단점

  • 인덱싱에는 인덱스 데이터 구조를 유지하기 위해 더 많은 저장 공간이 필요하며, 이로 인해 데이터베이스의 전체 크기가 늘어날 수 있습니다.
  • 데이터베이스 유지 관리 오버헤드 증가: 테이블에 데이터가 추가, 삭제 또는 수정될 때 인덱스를 유지해야 하며, 이로 인해 데이터베이스 유지 관리 오버헤드가 발생할 수 있습니다.
  • 인덱싱은 데이터가 수정될 때마다 인덱스 데이터 구조를 업데이트해야 하므로 삽입 및 업데이트 성능을 저하시킬 수 있습니다.
  • 인덱스를 선택하는 것은 어려울 수 있습니다. 특정 쿼리나 애플리케이션에 적합한 인덱스를 선택하는 것은 어려울 수 있으며 데이터 및 액세스 패턴에 대한 자세한 검사가 필요할 수 있습니다.

인덱싱의 특징

  • 다음과 같은 데이터 구조의 개발 B-트리 또는 인덱싱 열에 가장 중요한 열은 사용 빈도와 수행되는 쿼리 종류에 따라 선택됩니다. 그만큼 카디널리티 , 선택성 및 인덱싱 열의 고유성을 고려할 수 있습니다.
  • 기본, 보조, 클러스터형 및 비클러스터형 인덱스를 포함하여 데이터베이스에서 사용되는 여러 가지 인덱스 유형이 있습니다. 데이터베이스 시스템의 특정 요구 사항에 따라 각 인덱스 형태는 장점과 단점을 제공합니다.
  • 데이터베이스 시스템이 최상의 성능을 발휘하려면 정기적인 인덱스 유지 관리가 필요합니다. 데이터 및 사용 패턴의 변화에 ​​따라 유지 관리 작업에는 인덱스 구축, 업데이트 및 제거가 포함됩니다.
  • 데이터베이스 쿼리 최적화에는 필수적인 인덱싱이 포함됩니다. 쿼리 최적화 프로그램은 인덱스를 활용하여 데이터 액세스 비용과 인덱싱 열의 선택성을 기반으로 특정 쿼리에 대한 최상의 실행 전략을 선택합니다.
  • 데이터베이스는 인덱스 포함, 인덱스 전용 스캔, 부분 인덱스 등 다양한 인덱싱 전략을 사용합니다. 이러한 기술은 특정 유형의 쿼리 및 데이터 액세스에 대한 인덱스 활용도를 극대화합니다.
  • 연속되지 않은 데이터 블록이 인덱스에 저장되면 인덱스 조각화가 발생하여 인덱스의 효율성이 떨어질 수 있습니다. 조각 모음, 재구성 등 정기적인 인덱스 유지 관리가 줄어들 수 있습니다. 분열 .

결론

인덱싱은 검색 시간을 최적화하는 데 도움이 되는 매우 유용한 기술입니다. 데이터 베이스 쿼리. 데이터베이스 인덱싱 테이블은 검색 키와 바늘 . 인덱싱에는 기본, 보조 클러스터링, 다중값 인덱싱의 네 가지 유형이 있습니다. 기본 인덱싱은 밀집형과 희소형의 두 가지 유형으로 나뉩니다. 조밀한 인덱싱은 인덱스 테이블에 모든 검색 키에 대한 레코드가 포함될 때 사용됩니다. 스파스 인덱싱은 인덱스 테이블이 모든 레코드에 대해 검색 키를 사용하지 않을 때 사용됩니다. 다단계 인덱싱 사용 B+트리 . 인덱싱의 주요 목적은 데이터 검색에 더 나은 성능을 제공하는 것입니다.

인덱싱에 대한 FAQ

Q.1: 데이터베이스의 인덱싱이란 무엇입니까?

답변:

자바 규칙 명명

인덱싱은 기본적으로 데이터베이스 쿼리의 검색 시간을 줄이는 데 도움이 되거나 데이터베이스에 더 빠르게 액세스하는 데 도움이 되는 기술입니다.

Q.2: 인덱싱 데이터베이스의 예는 무엇입니까?

답변:

색인 데이터베이스의 일반적인 예로는 Web of Science, DOAJ(Directory of Open Access Journals)가 있습니다.

자세한 내용은 다음을 참조하세요. B+트리 소개 그리고 데이터베이스의 키 유형 기사.