인덱스 스캔에서 인덱스 액세스 방법은 다음을 담당합니다. 이미 알려진 모든 튜플의 TID를 역류합니다. 일치하는 것은윈 토토 키. 접근 방법은아님관련됨 실제로 인덱스의 상위 테이블에서 해당 튜플을 가져오는 과정에서 윈 토토 시간이 지났는지 여부를 판단하는 것도 아닙니다. 자격 시험 또는 기타 조건.
윈 토토 키는 다음의 내부 표현입니다.어디양식의 절index_key 연산자 상수, 여기서 인덱스 키는 다음 중 하나입니다. 인덱스의 열과 연산자는 해당 인덱스 열과 관련된 연산자 계열입니다. 인덱스 스캔에는 암시적으로 AND로 연결된 0개 이상의 윈 토토 키가 있습니다. 반환된 튜플은 표시된 모든 항목을 만족할 것으로 예상됩니다. 조건.
연산자 계열은 색인이 다음과 같음을 나타낼 수 있습니다.손실특정 연산자에 대해; 이는 암시한다 인덱스 스캔은 윈 토토 키와 그렇지 않은 추가 항목이 있을 수 있습니다. 핵심 그러면 시스템의 인덱스 스캔 기계가 해당 연산자를 다시 적용합니다. 실제로 그래야 하는지 확인하기 위해 힙 튜플에 선택되었습니다. 손실이 없는 연산자의 경우 인덱스 스캔은 다음을 반환해야 합니다. 다시 확인하지 않으므로 정확히 일치하는 항목 집합입니다.
다음을 보장하는 것은 전적으로 액세스 방법에 달려 있습니다.
모든 항목을 통과하는 항목만 올바르게 찾습니다.
주어진 윈 토토 키. 또한 핵심 시스템은 모든 것을 간단히 전달합니다.어디색인과 일치하는 절
의미론적 분석 없이 키 및 연산자 계열
중복되는지 모순되는지 확인합니다. 로서
예, 주어진여기서 x 4 AND x
14어디에서x인덱스된 B-트리입니다
열은 b-트리에 남습니다.amrescan함수는 첫 번째
윈 토토 키는 중복되므로 폐기할 수 있습니다. 정도
동안 전처리가 필요함amrescan정도에 따라 달라집니다.
인덱스 액세스 방법은 윈 토토 키를 a로 줄여야 합니다."정규화됨"양식.
일부 액세스 방법은 잘 정의된 형식으로 색인 항목을 반환합니다. 주문, 다른 사람들은 그렇지 않습니다. 항목이 정렬된 순서로 반환되는 경우 액세스 방법을 설정해야 합니다.pg_am.암캔오더true는 정렬된 스캔을 지원함을 나타냅니다. 이러한 모든 액세스 메소드는 해당 메소드에 대해 btree 호환 전략 번호를 사용해야 합니다. 항등 및 순서 연산자.
그amgettuple함수에는방향인수, 둘 중 하나일 수 있음ForwardScanDirection(일반적인 경우)
또는BackwardScanDirection. 첫 번째 경우
이후에 전화하세요amrescan지정BackwardScanDirection, 그런 다음
일치하는 인덱스 항목을 스캔하는 대신 뒤에서 앞으로 스캔합니다.
일반적인 앞에서 뒤로 방향으로, 그래서amgettuple마지막으로 일치하는 튜플을 반환해야 합니다
일반적으로 첫 번째 인덱스가 아닌 인덱스에 포함됩니다.
(이는 자신을 광고하는 액세스 방법에만 발생합니다.
순서가 지정된 스캔을 지원합니다.) 첫 번째 통화 후,amgettuple스캔을 진행할 준비가 되어 있어야 합니다.
가장 최근에 반환된 항목에서 어느 방향으로든.
액세스 방법은 다음을 지원해야 합니다."마킹"윈 토토의 위치 및 나중에 반환
표시된 위치로 이동합니다. 같은 위치로 복원될 수 있음
여러 번. 그러나 각 위치는 하나만 기억하면 됩니다.
윈 토토; 새로운ammarkpos전화
이전에 표시된 위치를 재정의합니다.
스캔 위치와 마크 위치(있는 경우)는 모두 다음과 같아야 합니다. 동시 삽입에도 일관되게 유지되거나 인덱스에서 삭제됩니다. 새로 삽입된 항목이면 괜찮습니다. 항목이 있었다면 항목을 찾았을 스캔에 의해 반환되지 않았습니다. 스캔이 시작될 때 존재했거나 스캔이 그러한 재검사 또는 백업 시 항목이 삭제되지 않았음에도 불구하고 처음으로 돌아왔습니다. 마찬가지로 동시 삭제 검사 결과에 반영될 수도 있고 반영되지 않을 수도 있습니다. 무엇입니까? 중요한 것은 삽입이나 삭제로 인해 스캔이 중단되지 않는다는 것입니다. 그 자체가 아닌 반환 항목을 놓치거나 늘리십시오. 삽입 또는 삭제되었습니다.
사용하는 대신amgettuple,
인덱스 스캔은 다음으로 수행할 수 있습니다.amgetmulti호출당 여러 튜플을 가져옵니다.
이는 다음보다 눈에 띄게 더 효율적일 수 있습니다.amgettuple왜냐하면 회피를 허용하기 때문입니다
액세스 방법 내에서 잠금/잠금 해제 주기. 원칙적으로amgetmulti동일해야 합니다
반복되는 효과amgettuple호출하지만 문제를 단순화하기 위해 몇 가지 제한 사항을 적용합니다. 에서
첫 번째 장소,amgetmulti그렇습니다
복용하지 마세요방향인수 및
따라서 역방향 스캔이나 내부 스캔을 지원하지 않습니다.
방향전환. 액세스 방법은 표시를 지원할 필요가 없습니다.
또는 도중에 스캔 위치를 복원하는 중입니다.amgetmulti둘 중 하나를 윈 토토하세요. (이러한 제한 사항은
이러한 기능을 사용하기 어렵기 때문에 비용이 거의 들지 않습니다.
anamgetmulti어쨌든 검색:
호출자의 버퍼링된 TID 목록을 조정하는 것은 복잡합니다.)
마지막으로,amgetmulti하지 않습니다
반환된 튜플의 잠금을 보장합니다.
에서 철자됨PostgreSQL : 문서 : 8.3 : 배트맨 토토 잠금 고려 사항.