[고유] 인덱스 생성색인_이름켜짐테이블[ 사용 중acc_method ] ( 열 [ ops_name] [, ...] )
    [어디에서술어]
[ 고유 ] 인덱스 생성색인_이름ON테이블[ 사용 중acc_method ] ( func_name( 열 [, ... ]) [ ops_name] )
    [어디에서술어 ]
  시스템이 다음에서 중복된 값을 확인하도록 합니다. 인덱스 생성 시 테이블(데이터가 이미 존재하는 경우) 그리고 데이터가 추가될 때마다. 삽입 또는 업데이트 시도 중복 항목이 발생하는 데이터는 오류가 발생합니다.
생성될 색인의 이름입니다.
인덱싱할 테이블의 이름.
다음에 사용될 액세스 방법의 이름 색인. 기본 액세스 방법은 다음과 같습니다.BTREE. PostgreSQL4개의 액세스 제공 인덱스 메서드:
Lehman-Yao 높은 동시성 구현 B-트리.
Guttman의 방법을 사용하여 표준 R-트리를 구현합니다. 2차 분할 알고리즘.
Litwin의 선형 구현 해싱.
일반화된 젠 토토 검색 트리.
테이블의 열 이름.
관련 연산자 클래스. 자세한 내용은 아래를 참조하세요. 세부사항.
다음과 같은 값을 반환하는 함수 색인이 생성되었습니다.
부분에 대한 제약 조건 표현식을 정의합니다. 젠 토토.
색인 생성젠 토토을 구성합니다색인_이름지정된테이블.
팁:젠 토토은 주로 데이터베이스를 향상하는 데 사용됩니다. 성능. 그러나 부적절하게 사용하면 속도가 느려집니다. 성능.
위에 표시된 첫 번째 구문에서, 인덱스는 열 이름으로 지정됩니다. 여러 필드가 가능합니다. 인덱스 액세스 방법이 다중 열을 지원하는 경우 지정됩니다. 색인.
위에 표시된 두 번째 구문에서 인덱스는 사용자가 지정한 함수의 결과func_name하나 이상의 열에 적용됨 테이블 하나. 이들기능 젠 토토다음 연산자를 기반으로 데이터에 빠르게 액세스하는 데 사용할 수 있습니다. 일반적으로 이를 적용하려면 약간의 변환이 필요합니다. 기본 데이터.
PostgreSQLB-트리 제공, 인덱스에 대한 R-트리, 해시 및 GiST 액세스 방법입니다. B-트리 액세스 방법은 Lehman-Yao 높은 동시성을 구현한 것입니다. B-트리. R-트리 액세스 방법은 표준 R-트리를 구현합니다. Guttman의 2차 분할 알고리즘을 사용합니다. 해시 액세스 방법 Litwin의 선형 해싱을 구현한 것입니다. 우리는 이러한 모든 액세스가 있음을 나타내기 위해서만 사용되는 알고리즘 방법은 완전히 동적이므로 최적화할 필요가 없습니다. 주기적으로(예를 들어 정적 해시의 경우처럼) 액세스 방법).
때어디절이 존재합니다. a부분 젠 토토생성되었습니다. 부분적인 인덱스는 특정 부분에 대한 항목만 포함하는 인덱스입니다. 일반적으로 테이블보다 더 흥미로운 부분입니다. 나머지 테이블. 예를 들어, 다음과 같은 테이블이 있다면 청구되지 않은 주문과 청구되지 않은 주문이 모두 포함되어 있습니다. 주문은 전체 테이블에서 작은 부분을 차지하지만 자주 사용되는 섹션이므로 다음을 생성하여 성능을 향상시킬 수 있습니다. 해당 부분에 대한 색인입니다. 또 다른 가능한 적용은 다음과 같습니다. 사용어디함께고유의 하위 집합에 고유성을 적용합니다. 테이블.
다음에 사용된 표현어디절 기본 테이블의 열만 참조할 수 있습니다(그러나 다음을 사용할 수 있습니다). 인덱싱되는 열뿐만 아니라 모든 열). 현재, 하위 SELECT 및 집계 표현식도 금지됩니다.어디.
색인 정의에 사용되는 모든 함수와 연산자는 다음을 충족해야 합니다. 수캐시 가능, 즉 결과는 다음과 같아야 합니다. 입력 인수에만 의존하고 외부에는 절대 의존하지 않습니다. 영향(예: 다른 테이블의 내용이나 현재 시간). 이 제한은 인덱스의 동작이 다음과 같도록 보장합니다. 잘 정의되어 있습니다. 인덱스에서 사용자 정의 함수를 사용하려면, 함수를 생성할 때 함수를 캐시 가능으로 표시하는 것을 잊지 마세요.
사용PostgreSQL : 문서 : 7.2 : 삭제 사설 토토에 젠 토토을 제거합니다.
그PostgreSQL질의 최적화 프로그램은 다음과 같은 상황이 발생할 때마다 B-트리 인덱스 사용을 고려할 것입니다. 색인화된 속성은 다음 중 하나를 사용하여 비교에 포함됩니다. <, <=, =, =,
그PostgreSQL질의 최적화 프로그램은 R-트리 인덱스 사용을 고려할 것입니다. 색인화된 속성은 다음 중 하나를 사용하여 비교에 포함됩니다. <<, &<, &, , @, ~=, &&
그PostgreSQL질의 최적화 프로그램은 색인이 생성될 때마다 해시 색인 사용을 고려합니다. 속성은를 사용한 비교에 포함됩니다.=연산자.
현재 B-tree 및 Gist 액세스 방법만 지원합니다. 다중 열 인덱스. 기본적으로 최대 16개의 키를 지정할 수 있습니다. (이 제한은 빌드 시 변경될 수 있습니다.PostgreSQL). 현재 B-트리만 고유 인덱스를 지원합니다.
안연산자 클래스지정 가능 인덱스의 각 열에 대해. 연산자 클래스는 해당 열의 인덱스에서 사용할 연산자입니다. 예를 들어, 4바이트 정수의 B-트리 인덱스는 다음을 사용합니다.int4_ops클래스; 이 연산자 클래스에는 다음이 포함됩니다. 4바이트 정수에 대한 비교 함수. 실제로는 필드의 데이터 유형에 대한 기본 연산자 클래스는 일반적으로 충분하다. 연산자 클래스를 갖는 주요 요점은 일부 데이터 유형의 경우 의미 있는 값이 두 개 이상 있을 수 있습니다. 주문. 예를 들어, 복소수를 정렬하고 싶을 수도 있습니다. 절대값 또는 실수부로 데이터 유형을 지정합니다. 우리는 할 수 있었다 이는 데이터 유형에 대해 두 개의 연산자 클래스를 정의하고 그런 다음 인덱스를 만들 때 적절한 클래스를 선택합니다. 있다 또한 특별한 목적을 가진 일부 연산자 클래스도 있습니다:
연산자 클래스box_ops그리고bigbox_ops둘 다 R-트리를 지원합니다. 의 색인상자데이터 유형. 는 차이점은 다음과 같습니다.bigbox_ops상자 좌표를 아래로 조정합니다. 곱셈에서 부동 소수점 예외를 방지하고, 매우 큰 부동 소수점에 대한 덧셈 및 뺄셈 좌표. (참고: 이는 얼마 전까지만 해도 사실이었습니다. 현재 두 연산자 클래스는 모두 부동 소수점을 사용합니다. 사실상 동일합니다.)
다음 쿼리는 정의된 모든 연산자 클래스를 보여줍니다:
am.amname AS acc_method를 선택하세요.
       opc.opcname AS ops_name,
       opr.oprname AS ops_comp
    pg_am am, pg_opclass opc, pg_amop amop, pg_operator opr에서
    opc.opcamid = am.oid AND
          amop.amopclaid = opc.oid AND
          amop.amopopr = opr.oid
    ORDER BY acc_method, ops_name, ops_comp;