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

48.3. 인덱스 스캐닝

인덱스 스캔에서 인덱스 액세스 방법은 다음을 담당합니다. 이미 알려진 모든 튜플의 TID를 역류합니다. 일치하는 것은토토 베이 키. 접근 방법은아님관련됨 실제로 인덱스의 상위 테이블에서 해당 튜플을 가져오는 과정에서 토토 베이 시간이 지났는지 여부를 판단하는 것도 아닙니다. 자격 시험 또는 기타 조건.

토토 베이 키는 다음의 내부 표현입니다.어디양식의 절index_key 연산자 상수, 여기서 인덱스 키는 다음 중 하나입니다. 인덱스의 열과 연산자는 해당 인덱스 열과 연관된 연산자 클래스. 인덱스 스캔에는 암시적으로 AND로 연결된 0개 이상의 토토 베이 키가 있습니다. 반환된 튜플은 표시된 모든 항목을 만족할 것으로 예상됩니다. 조건.

연산자 클래스는 색인이 다음과 같음을 나타낼 수 있습니다.손실특정 연산자에 대해; 이는 암시한다 인덱스 스캔은 토토 베이 키와 그렇지 않은 추가 항목이 있을 수 있습니다. 핵심 그러면 시스템의 인덱스 스캔 기계가 해당 연산자를 다시 적용합니다. 실제로 그래야 하는지 확인하기 위해 힙 튜플에 선택되었습니다. 손실이 없는 연산자의 경우 인덱스 스캔은 다음을 반환해야 합니다. 다시 확인하지 않으므로 정확히 일치하는 항목 집합입니다.

다음을 보장하는 것은 전적으로 액세스 방법에 달려 있습니다. 모든 항목을 통과하는 항목만 올바르게 찾습니다. 주어진 토토 베이 키. 또한 핵심 시스템은 모든 것을 간단히 전달합니다.어디색인과 일치하는 절 의미론적 분석 없이 키 및 연산자 클래스 중복되는지 모순되는지 확인합니다. 로서 예, 주어진여기서 x 4 AND x 14어디에서x인덱스된 B-트리입니다 열은 b-트리에 남습니다.amrescan함수는 첫 번째 토토 베이 키는 중복되므로 폐기할 수 있습니다. 정도 동안 전처리가 필요함amrescan정도에 따라 달라집니다. 인덱스 액세스 방법은 토토 베이 키를 a로 줄여야 합니다."정규화됨"양식.

amgettuple함수에는방향인수, 둘 중 하나일 수 있음ForwardScanDirection(일반적인 경우) 또는BackwardScanDirection. 첫 번째 경우 이후에 전화하세요amrescan지정BackwardScanDirection, 그런 다음 일치하는 인덱스 항목을 스캔하는 대신 뒤에서 앞으로 스캔합니다. 일반적인 앞에서 뒤로 방향으로, 그래서amgettuple마지막으로 일치하는 튜플을 반환해야 합니다 일반적으로 첫 번째 인덱스가 아닌 인덱스에 포함됩니다. (이는 자신을 광고하는 액세스 방법에만 발생합니다. 설정을 통해 정렬된 스캔을 지원합니다.pg_am.amorderstrategy0이 아닙니다.) 첫 번째 이후 전화해,amgettuple반드시 준비되어야 합니다 가장 최근부터 어느 방향으로든 스캔을 진행하려면 항목을 반환했습니다.

액세스 방법이 다음을 지원해야 합니다."마킹"토토 베이의 위치 및 나중에 반환 표시된 위치로 이동합니다. 같은 위치로 복원될 수 있음 여러 번. 그러나 각 위치는 하나만 기억하면 됩니다. 토토 베이; 새로운ammarkpos전화 이전에 표시된 위치를 재정의합니다.

스캔 위치와 마크 위치(있는 경우)는 모두 다음과 같아야 합니다. 동시 삽입에도 일관되게 유지되거나 인덱스에서 삭제됩니다. 새로 삽입된 항목이면 괜찮습니다. 항목이 있었다면 항목을 찾았을 스캔에 의해 반환되지 않았습니다. 스캔이 시작될 때 존재했거나 스캔이 그러한 재검사 또는 백업 시 항목이 삭제되지 않았음에도 불구하고 처음으로 돌아왔습니다. 마찬가지로 동시 삭제 검사 결과에 반영될 수도 있고 반영되지 않을 수도 있습니다. 무엇입니까? 중요한 것은 삽입이나 삭제로 인해 스캔이 중단되지 않는다는 것입니다. 그 자체가 아닌 반환 항목을 놓치거나 늘리십시오. 삽입 또는 삭제되었습니다. (설정되지 않은 인덱스 유형의 경우pg_am.am동시, 이를 처리하는 것으로 충분합니다. 동일한 백엔드에서 삽입 또는 삭제를 수행하는 경우 그게 토토 베이을 하는 거야. 하지만 언제amconcurrent참이면 삽입 또는 삭제됩니다. 다른 백엔드의 것도 처리해야 합니다.)

사용하는 대신amgettuple, 인덱스 스캔은 다음으로 수행할 수 있습니다.amgetmulti호출당 여러 튜플을 가져옵니다. 이는 다음보다 눈에 띄게 더 효율적일 수 있습니다.amgettuple왜냐하면 회피를 허용하기 때문입니다 액세스 방법 내에서 잠금/잠금 해제 주기. 원칙적으로amgetmulti동일해야 합니다 반복되는 효과amgettuple호출하지만 문제를 단순화하기 위해 몇 가지 제한 사항을 적용합니다. 에서 첫 번째 장소,amgetmulti그렇습니다 복용하지 마세요방향인수 및 따라서 역방향 스캔이나 내부 스캔을 지원하지 않습니다. 방향전환. 액세스 방법은 표시를 지원할 필요가 없습니다. 또는 도중에 스캔 위치를 복원하는 중입니다.amgetmulti둘 중 하나를 토토 베이하세요. (이러한 제한 사항은 이러한 기능을 사용하기 어렵기 때문에 비용이 거의 들지 않습니다. anamgetmulti어쨌든 토토 베이: 호출자의 버퍼링된 TID 목록을 조정하는 것은 복잡합니다.) 마지막으로,amgetmulti하지 않습니다 반환된 튜플의 잠금을 보장합니다. 에서 철자됨PostgreSQL : 문서 : 8.1 : 토토 베이 잠금 고려 사항.