이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.사설 토토 PostgreSQL : 문서 : 17 : 색인 생성버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

만들기 인덱스

이름

CREATE INDEX -- 새 색인 정의

시놉시스

[ 고유 ] 인덱스 배트맨 토토 [ 동시 ] [이름] 켜짐테이블_이름[ 사용 중방법 ]
    ( { 열_이름 | ( 표현)  [ 대조조합 ] [ opclass] [ ASC | DESC ] [ NULLS  첫 번째 | 마지막  ] [, ...] )
    [ 와 (storage_parameter = [, ... ] ) ]
    [테이블스페이스테이블스페이스_이름]
    [어디에서술어 ]

설명

색인 배트맨 토토다음에 색인을 생성합니다. 지정된 관계의 지정된 열(테이블일 수 있음) 또는 구체화된 뷰. 인덱스는 주로 성능 향상에 사용됩니다. 데이터베이스 성능(부적절하게 사용하면 속도가 느려질 수 있음) 성능).

색인의 키 필드가 열 이름으로 지정되었습니다. 또는 또는 괄호 안에 표현을 작성합니다. 다중 인덱스 방법이 다중 열을 지원하는 경우 필드를 지정할 수 있습니다. 색인.

색인 필드는 다음 값에서 계산된 표현식일 수 있습니다. 테이블 행의 하나 이상의 열. 이 기능은 다음과 같은 용도로 사용할 수 있습니다. 일부 변환을 기반으로 데이터에 대한 빠른 액세스를 얻습니다. 기본 데이터. 예를 들어, 다음에서 계산된 인덱스입니다.상단(열)다음 조항을 허용하겠습니다WHERE 상단(열) = 'JIM'색인을 사용합니다.

PostgreSQL색인 제공 방법 B-트리, 해시, GiST, SP-GiST 및 GIN. 사용자는 다음을 정의할 수도 있습니다. 자체 색인 방법을 사용하지만 상당히 복잡합니다.

어디절이 존재합니다. a부분 색인생성되었습니다. 부분 인덱스 테이블의 일부에 대한 항목만 포함하는 인덱스입니다. 일반적으로 나머지 부분보다 색인 배트맨 토토에 더 유용한 부분입니다. 테이블. 예를 들어, 두 가지를 모두 포함하는 테이블이 있는 경우 청구되지 않은 주문이 차지하는 청구 및 미청구 주문 전체 테이블의 작은 부분이지만 자주 사용됩니다. 섹션에서 인덱스를 생성하여 성능을 향상시킬 수 있습니다. 그 부분. 또 다른 가능한 응용 프로그램은 다음을 사용하는 것입니다.어디고유에 테이블의 하위 집합에 대해 고유성을 적용합니다. 참조섹션 11.8자세한 토론을 원하시면.

다음에 사용된 표현어디에서절 기본 테이블의 열만 참조할 수 있지만 인덱싱되는 열뿐만 아니라 모든 열. 현재 서브쿼리는 집계 표현식도 금지됩니다.어디에서. 인덱스 필드에도 동일한 제한 사항이 적용됩니다. 그건 표현이에요.

색인 정의에 사용되는 모든 함수와 연산자는 다음과 같아야 합니다."불변", 즉 결과는 다음과 같아야 합니다. 자신의 주장에만 의존하고 외부 영향에는 절대 의존하지 않습니다. (예: 다른 테이블의 내용이나 현재 시간) 이 제한은 인덱스의 동작이 잘 정의되도록 보장합니다. 인덱스 표현식에서 사용자 정의 함수를 사용하려면 또는어디절, 함수를 표시하는 것을 잊지 마세요 배트맨 토토할 때 변경할 수 없습니다.

매개변수

고유

시스템이 테이블의 중복된 값을 확인하도록 합니다. 인덱스가 배트맨 토토될 때(데이터가 이미 존재하는 경우) 그리고 매번 데이터가 추가됩니다. 결과가 발생하는 데이터를 삽입하거나 업데이트하려고 시도합니다. 중복된 항목이 있으면 오류가 발생합니다.

동시

이 옵션을 사용하면,포스트그레SQL다음을 취하지 않고 색인을 구축할 것입니다. 동시 삽입, 업데이트 또는 삭제를 방지하는 잠금 테이블; 표준 인덱스 빌드는 쓰기를 잠그는 반면(그러나 읽음)이 완료될 때까지 테이블 위에 올려 놓습니다. 여러 가지 주의사항이 있습니다 이 옵션을 사용할 때 주의하세요. — 참조건물 동시에 인덱스.

이름

생성될 색인의 이름. 스키마 이름은 없습니다. 여기에 포함됨; 인덱스는 항상 동일한 스키마에서 생성됩니다. 상위 테이블입니다. 이름이 생략된 경우,포스트그레SQL다음에 따라 적합한 이름을 선택합니다. 상위 테이블의 이름과 인덱싱된 열 이름.

테이블_이름

테이블의 이름(스키마 한정) 색인이 생성되었습니다.

방법

사용할 색인 방법의 이름. 선택 사항은 다음과 같습니다.브트리, 해시, 요점, spgist그리고. 기본 방법은 다음과 같습니다.브트리.

열_이름

테이블의 열 이름.

표현

테이블의 하나 이상의 열을 기반으로 하는 표현식입니다. 는 표현식은 일반적으로 다음과 같이 괄호로 묶어야 합니다. 구문에 표시됩니다. 다만, 다음의 경우에는 괄호를 생략할 수 있습니다. 표현식은 함수 호출의 형태를 가집니다.

조합

색인에 사용할 데이터 정렬의 이름. 기본적으로 index는 인덱싱할 열에 대해 선언된 데이터 정렬을 사용합니다. 인덱싱할 표현식의 결과 조합입니다. 다음을 포함한 인덱스 기본이 아닌 데이터 정렬은 다음과 같은 쿼리에 유용할 수 있습니다. 기본이 아닌 데이터 정렬을 사용하는 표현식입니다.

opclass

연산자 클래스의 이름. 자세한 내용은 아래를 참조하세요.

ASC

오름차순 정렬 순서를 지정합니다(기본값).

설명

내림차순 정렬 순서를 지정합니다.

NULL이 먼저임

null이 null이 아닌 항목보다 먼저 정렬되도록 지정합니다. 이것이 기본값입니다 언제설명지정되었습니다.

NULL이 마지막임

null이 null이 아닌 항목 이후에 정렬되도록 지정합니다. 이것이 기본값입니다 언제설명지정되지 않았습니다.

storage_parameter

인덱스 메소드별 저장 매개변수의 이름. 참조색인 저장 매개변수자세한 내용은.

테이블스페이스_이름

인덱스를 배트맨 토토할 테이블스페이스. 지정하지 않은 경우,default_tablespace상담을 받거나, 또는temp_tablespaces임시 테이블의 인덱스용.

술어

부분 색인에 대한 제약 조건 표현식입니다.

인덱스 저장 매개변수

선택사항WITH절이 지정함저장 매개변수색인용. 각각 index 메소드에는 자체적으로 허용되는 저장 매개변수 세트가 있습니다. 는 B-트리, 해시, GiST 및 SP-GiST 인덱스 방법은 모두 이를 허용합니다. 매개변수:

필팩터

인덱스의 채우기 비율은 인덱스의 채우기 비율입니다. full 인덱스 메소드는 인덱스 페이지를 압축하려고 시도합니다. B-트리의 경우, 리프 페이지는 초기 인덱스 중에 이 비율로 채워집니다. 빌드할 때, 그리고 오른쪽에 있는 인덱스를 확장할 때(새 항목 추가 가장 큰 키 값). 이후에 페이지가 완전히 가득 찬 경우, 분할되어 지수의 점진적인 저하로 이어집니다. 효율성. B-트리는 기본 채우기 비율 90을 사용하지만 모든 정수 10에서 100 사이의 값을 선택할 수 있습니다. 테이블이 정적이면 fillfactor 100은 인덱스의 물리적 크기를 최소화하는 데 가장 좋지만 많이 업데이트된 테이블의 경우 채우기 비율이 더 작은 것이 더 좋습니다. 페이지 분할의 필요성을 최소화합니다. 다른 인덱스 방법은 다음을 사용합니다. 채우기 요소는 다르지만 대략 유사한 방식입니다. 기본값 채우기 비율은 방법마다 다릅니다.

GiST 색인은 추가로 이 매개변수를 허용합니다:

버퍼링

에 설명된 버퍼링 빌드 기술이 있는지 결정섹션 55.3.1은 색인을 작성하는 데 사용됩니다. 와 함께꺼짐비활성화되었습니다.ON활성화되어 있으며자동그렇습니다 처음에는 비활성화되었지만 인덱스 크기가 커지면 즉시 활성화됩니다. 도달유효_캐시_크기. 기본값은자동.

GIN 색인은 다른 매개변수를 허용합니다.

빠른 업데이트

이 설정은 빠른 업데이트 기술의 사용을 제어합니다 설명됨57.3.1항. 그것은 부울 매개변수:ON빠른 사용 가능 업데이트,꺼짐비활성화합니다. (대체 철자법ON그리고꺼짐설명된 대로 허용됩니다섹션 18.1.) 기본값은ON.

참고:돌고 있는빠른 업데이트꺼짐 경유색인 변경향후 삽입을 방지합니다. 보류 중인 인덱스 항목 목록으로 들어갈 수는 없지만 자체적으로 이전 항목을 플러시합니다. 당신은 원할 수도 있습니다진공나중에 테이블을 확인하여 보류 중인 항목을 확인하세요. 목록이 비어 있습니다.

동시에 색인 작성

색인을 배트맨 토토하면 일반적인 작업을 방해할 수 있습니다. 데이터베이스. 일반적으로PostgreSQL인덱싱할 테이블을 쓰기에 대해 잠그고 다음을 수행합니다. 테이블을 한 번 스캔하여 전체 인덱스를 구축합니다. 기타 트랜잭션은 여전히 테이블을 읽을 수 있지만 삽입을 시도하면 인덱스가 나올 때까지 차단할 테이블의 행을 업데이트하거나 삭제합니다. 빌드가 완료되었습니다. 시스템이 다음과 같은 경우 심각한 영향을 미칠 수 있습니다. 라이브 프로덕션 데이터베이스. 매우 큰 테이블은 몇 시간이 걸릴 수 있습니다. 인덱스가 필요하며 작은 테이블의 경우에도 인덱스 빌드로 인해 잠길 수 있습니다. 제작에 있어서 용납할 수 없을 정도로 긴 기간 동안 작가를 아웃시킵니다. 시스템.

포스트그레SQL건물 지원 쓰기를 잠그지 않고 인덱스를 생성합니다. 이 메소드는 다음에 의해 호출됩니다. 를 지정동시옵션색인 배트맨 토토. 이 옵션을 사용하면,PostgreSQL두 번의 스캔을 수행해야 합니다. 테이블의 모든 기존 테이블을 기다려야 합니다. 잠재적으로 인덱스를 수정하거나 인덱스를 사용할 수 있는 트랜잭션 종료합니다. 따라서 이 방법은 일반 작업보다 더 많은 작업이 필요합니다. 표준 인덱스 빌드이며 완료하는 데 훨씬 더 오랜 시간이 걸립니다. 그러나 이는 정상적인 작동이 계속되는 동안 허용되기 때문에 인덱스가 빌드되면 이 방법은 새 인덱스를 추가하는 데 유용합니다. 생산 환경. 물론 추가 CPU 및 I/O 로드는 인덱스 생성으로 인해 부과된 작업으로 인해 다른 작업이 느려질 수 있습니다.

동시 인덱스 빌드에서 인덱스는 실제로 하나의 트랜잭션으로 시스템 카탈로그를 생성한 다음 두 개의 테이블 스캔이 발생합니다. 두 번의 거래가 더 필요합니다. 각 테이블 스캔 전에 인덱스가 빌드됩니다. 테이블을 수정한 기존 트랜잭션을 기다려야 합니다. 종료합니다. 두 번째 스캔 후 인덱스 빌드는 다음을 기다려야 합니다. 스냅샷이 있는 거래(참조메이저 토토 사이트 : 문서 : 9.3 : 동시성 제어)이 두 번째 스캔 종료보다 앞서 있습니다. 그러면 마침내 인덱스를 사용할 준비가 되었다고 표시할 수 있으며,색인 배트맨 토토명령이 종료됩니다. 그러나 그때에도, 쿼리에 인덱스를 즉시 사용하지 못할 수도 있습니다. 최악의 경우 경우, 이전의 거래가 존재하는 한 사용할 수 없습니다. 인덱스 빌드가 시작됩니다.

테이블을 스캔하는 동안 교착 상태와 같은 문제가 발생하는 경우 또는 고유 인덱스의 고유성 위반,색인 배트맨 토토명령은 실패하지만 뒤에 남깁니다."잘못됨"색인. 이 지수는 불완전할 수 있으므로 쿼리 목적에서는 무시됩니다. 그러나 여전히 업데이트 오버헤드가 소모됩니다.psql \d명령은 다음과 같은 색인을 보고합니다.잘못됨:

postgres=# \d 탭
       테이블 "public.tab"
 칼럼 |  유형 | 수정자 
------+---------+-----------
 열 | 정수 | 
인덱스:
    "idx" btree(열) 잘못된

이러한 경우 권장되는 복구 방법은 색인을 생성하고 다시 수행해 보세요.색인 배트맨 토토 동시에. (또 다른 가능성은 인덱스를 다시 작성하는 것입니다. 와 함께REINDEX. 그러나 이후REINDEX동시 빌드를 지원하지 않습니다. 옵션이 매력적으로 보이지 않을 것 같습니다.)

고유 색인을 동시에 구축할 때의 또 다른 주의사항은 고유성 제약 조건이 이미 다른 항목에 대해 시행되고 있습니다. 두 번째 테이블 스캔이 시작될 때 트랜잭션. 이는 다음을 의미합니다. 제약 조건 위반은 이전에 다른 쿼리에서 보고될 수 있습니다. 인덱스를 사용할 수 있게 되거나 결국 인덱스 빌드가 실패합니다. 또한, 만약에 장애가 발생한다면 두 번째 스캔,"잘못됨"색인 이후에도 고유성 제약 조건을 계속 적용합니다.

표현식 인덱스와 부분 인덱스의 동시 빌드는 다음과 같습니다. 지원됩니다. 이러한 표현식을 평가할 때 발생하는 오류 위에서 설명한 것과 유사한 동작이 발생할 수 있습니다. 제약 조건 위반.

정규 인덱스 빌드는 다음에서 다른 일반 인덱스 빌드를 허용합니다. 동일한 테이블이 병렬로 발생하지만 동시 인덱스는 하나만 있습니다. 빌드는 한 번에 테이블에서 발생할 수 있습니다. 두 경우 모두 다른 유형은 없습니다. 그 동안에는 테이블에 대한 스키마 수정이 허용됩니다. 또 다른 차이점은 일반이라는 것입니다.색인 배트맨 토토명령은 트랜잭션 블록 내에서 수행될 수 있지만동시에 인덱스 생성할 수 없습니다.

참고

참조토토 사이트 순위 : 문서 : 9.3 : 인덱스정보는 다음과 같습니다. 인덱스를 사용할 수 있는 경우, 사용하지 않는 경우, 특정 상황에서는 유용할 수 있습니다.

주의

해시 인덱스 작업은 현재 WAL에 기록되지 않으므로 해시 인덱스를 다시 작성해야 할 수도 있습니다.REINDEX데이터베이스 충돌 후 기록되지 않은 변경 사항. 또한 해시 인덱스에 대한 변경 사항은 복제되지 않습니다. 초기 기반 이후 오버스트리밍 또는 파일 기반 복제 백업하므로 이후에 사용하는 쿼리에 잘못된 답변을 제공합니다. 그들. 이러한 이유로 현재 해시 인덱스 사용은 낙담했다.

현재 B-tree, GiST 및 GIN 인덱스 방법만 지원됩니다. 다중 열 인덱스. 기본적으로 최대 32개의 필드를 지정할 수 있습니다. (이 제한은 구축 시 변경될 수 있습니다.PostgreSQL.) 현재는 B-트리만 지원합니다. 고유 인덱스.

연산자 클래스다음에 대해 지정할 수 있습니다. 인덱스의 각 열. 연산자 클래스는 해당 열의 인덱스에서 사용할 연산자입니다. 예를 들어, 4바이트 정수의 B-트리 인덱스는 다음을 사용합니다.int4_ops클래스; 이 연산자 클래스에는 다음이 포함됩니다. 4바이트 정수에 대한 비교 함수. 실제로는 열의 데이터 유형에 대한 기본 연산자 클래스는 일반적으로 충분하다. 연산자 클래스를 갖는 주요 요점은 다음과 같습니다. 일부 데이터 유형에는 의미 있는 순서가 두 개 이상 있을 수 있습니다. 예를 들어 복소수 데이터 유형을 정렬하려고 할 수 있습니다. 절대값으로든 실수부로든. 우리는 이것을 할 수 있습니다 데이터 유형에 대해 두 개의 연산자 클래스를 정의한 다음 선택 인덱스를 만들 때 적절한 클래스. 에 대한 추가 정보 연산자 클래스가 있습니다스포츠 토토 베트맨 : 문서 : 9.3 : 운영자 클래스 및 운영자 가족그리고와이즈 토토 PostgreSQL : 문서 : 9.3 : 인덱스에 대한 인터페이스 확장.

순서 있는 스캔을 지원하는 인덱스 방법의 경우(현재는 B-트리), 선택적 조항ASC, 설명, NULL 첫 번째및/또는NULL이 마지막임될 수 있습니다 인덱스의 정렬 순서를 수정하도록 지정되었습니다. 이후 순서가 지정된 인덱스는 앞으로 또는 뒤로 스캔할 수 있지만 그렇지 않습니다. 일반적으로 단일 열을 생성하는 데 유용합니다.설명색인 — 해당 정렬 순서는 이미 사용 가능합니다. 일반 인덱스로. 이 옵션의 가치는 다음과 같습니다. 정렬 순서와 일치하는 다중 열 인덱스를 생성할 수 있습니다. 다음과 같은 혼합 순서 쿼리에 의해 요청됨선택 ... ORDER BY x ASC, y DESC.NULLS지원이 필요한 경우 옵션이 유용합니다"null은 낮게 정렬됩니다"행동보다는 기본값"null은 높은 수준으로 정렬됩니다", 에 정렬 단계를 피하기 위해 인덱스에 의존하는 쿼리입니다.

대부분의 색인 방법의 경우 색인 배트맨 토토 속도는 설정에 따라 다름maintenance_work_mem. 값이 클수록 인덱스 배트맨 토토에 필요한 시간이 줄어들므로 실제로 메모리 양보다 크게 만들지 않는 한 사용 가능하며 이로 인해 시스템이 교체됩니다.

사용PostgreSQL : 문서 : 9.3 : 사설 토토 사이트 Index제거하려면 색인.

이전 릴리스PostgreSQL또한 R-트리 인덱스 방법이 있었습니다. 이 방법은 제거되었습니다 GiST 방법에 비해 큰 장점이 없었기 때문입니다. 만일rtree 사용 중지정되었습니다.색인 배트맨 토토다음과 같이 해석합니다요점 사용, 이전 데이터베이스의 변환을 단순화하기 위해 GiST로.

열에 B-트리 인덱스를 배트맨 토토하려면제목테이블에영화:

고유 인덱스 생성 title_idx ON 영화(제목);

표현식에 대한 색인을 생성하려면하위(제목), 효율적인 대소문자 구분 허용 검색:

영화에 대한 인덱스 생성((하위(제목)));

(이 예에서는 색인 이름을 생략하기로 선택했으므로 시스템은 일반적으로 이름을 선택합니다.films_lower_idx.)

기본이 아닌 데이터 정렬로 색인을 배트맨 토토하려면:

CREATE INDEX title_idx_german ON 영화(제목 COLLATE "de_DE");

기본값이 아닌 null 정렬 순서로 색인을 배트맨 토토하려면:

CREATE INDEX title_idx_nulls_low ON 영화(제목 NULLS FIRST);

기본값이 아닌 채우기 비율을 사용하여 색인을 생성하려면:

(fillfactor = 70)을 사용하여 영화(제목)에 고유 인덱스 title_idx 생성;

만들려면다음으로 색인화 빠른 업데이트가 비활성화되었습니다:

gin (위치) WITH (fastupdate = off)를 사용하여 document_table에 INDEX gin_idx 생성;

열에 색인을 배트맨 토토하려면코드테이블에영화그리고 색인을 가지고 있습니다 테이블스페이스에 상주함인덱스 공간:

CREATE INDEX code_idx ON 영화 (코드) TABLESPACE indexspace;

포인트 속성에 GiST 인덱스를 생성하여 다음을 수행할 수 있습니다. 변환 결과에 대해 상자 연산자를 효율적으로 사용 기능:

INDEX 포인트록 생성
    ON 포인트 USING gist (box(location,location));
SELECT * FROM 포인트
    WHERE 상자(위치, 위치) && '(0,0),(1,1)'::box;

테이블에 대한 쓰기를 잠그지 않고 색인을 생성하려면:

sales_table(수량)에 대해 동시에 sales_yangity_index 인덱스 생성;

호환성

색인 배트맨 토토PostgreSQL언어 확장. 없다 SQL 표준의 인덱스 조항.