ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • POSTGRES 테이블 인덱스 - 정리
    데이터베이스/postgresql 2024. 5. 10. 12:01
    728x90
    반응형

     

     

     

    인덱스(INDEX)란?

     

     

    • 중복 데이터 구조

    • 응용 프로그램에 표시되지 않음 

    • 특정 기준에 따라 데이터 선택 속도를 높이도록 설계

     

    중복성은 데이터 손실 없이 인덱스를 삭제할 수 있고 다른 곳(물론 테이블)에 저장된 데이터에서 재구성할 수 있음을 의미합니다. 응용 프로그램 표시되지 않음은 인덱스가 있는지 여부를 감지할 수 없음을 의미합니다. 즉, 모든 쿼리는 인덱스가 있든 없든 동일한 결과를 생성합니다. 마지막으로, 인덱스는 특정 쿼리 또는 (더 나은!) 여러 쿼리의 성능을 향상시킬 수 있다는 확신으로 만들어집니다.

     

    인덱스 오버헤드 성능 이슈

     

    테이블 인덱스는 테이블이 추가될떄마다 인덱스 테이블도 추가된다.

     

    그러므로 많은 인덱스를 설정할경우 insert 성능 이슈가 있을수있다.

     

    하지만, 요즘 dbms는 효과적인 인덱스 추가 알고리즘을 사용하기에 그렇게 큰 차이는 없다고한다.

     

    인덱스는 중복되므로 테이블 데이터가 업데이트될 때 업데이트해야 합니다. 이로 인해 때때로 무시할 수 없는 업데이트 작업에 대한 약간의 오버헤드가 발생합니다. 특히 PostgreSQL 인덱스는 vacuum 작업에 큰 영향을 미칠 수 있습니다. 그러나 많은 데이터베이스 교과서에서는 이 오버헤드를 과대평가합니다. 최신 고성능 DBMS는 인덱스 업데이트 비용을 줄이는 알고리즘을 사용하므로 일반적으로 테이블에 여러 인덱스를 만드는 것이 좋습니다

     

    인덱스 기능

    인덱스 구조는 인덱스 유형에 따라 크게 다를 수 있지만 쿼리에 지정된 일부 필터링 조건을 빠르게 검사하기 때문에 속도가 향상됩니다. 

     

    인덱스 테이블?

     

    그림 오른쪽은 테이블이고 왼쪽은 특별한 종류의 테이블로 볼 수 있는 인덱스 테이블입니다. 인덱스의 각 행은 인덱스 키와 테이블 행에 대한 포인터로 구성됩니다. 인덱스 키의 값은 일반적으로 테이블 속성의 값과 같습니다. 그림 예에는 공항 코드가 값으로 있습니다. 따라서 이 색인은 공항 코드로 검색을 지원합니다. 열은 테이블의 여러 행에서 동일한 값을 가질 수 있습니다. 이 열이 인덱싱되는 경우 인덱스는 인덱스 키의 이 값을 포함하는 모든 행에 대한 포인터를 포함해야 합니다. PostgreSQL에서 인덱스에는 여러 레코드가 포함되어 있으며, 즉, 인덱스 키는 테이블 행에 대한 모든 포인터에 대해 반복됩니다. 그림에서는 인덱스 레코드가 있을 때 해당 테이블 행에 도달하는 방법을 설명합니다. 

     

    B-Tree Indexes란?

     

    B-Tree 를 사용하는 이유?

    우리는 컴퓨터 과학을 통해 어떤 조회 알고리즘도 로그 N 시간(CPU 명령어로 측정)보다 더 빠르게 N개의 다른 키 중에서 인덱스 키를 찾을 수 없다는 것을 알고 있습니다. 이 성능은 정렬된 목록에서 이진 검색 또는 이진 트리를 사용하여 달성됩니다. 그러나, 갱신 비용(예: 새 키 삽입)은 정렬된 목록과 이진 트리 모두에 대해 매우 높을 수 있습니다: 단일 레코드의 삽입은 완전한 재구성을 유발할 수 있습니다. 이렇게 하면 두 구조 모두 외부 저장소에 사용할 수 없습니다. 대조적으로, B-트리는 큰 오버헤드 없이 수정할 수 있습니다. 레코드가 삽입되면 재구성은 하나의 블록으로 제한됩니다. 블록 용량이 초과되면 블록이 두 개의 블록으로 분할되고 업데이트가 상위 수준으로 전파됩니다. 최악의 경우 수정된 블록 수는 트리의 깊이를 초과할 수 없습니다.

    728x90
    반응형
Designed by Tistory.