"Bitmap heap scan"의 원칙을 알고 싶습니다. 조건에서 OR
으로 쿼리를 실행하면 가 자주 발생한다는 것을 알고 있습니다.쿼리 계획에서 "비트 맵 힙 스캔"이란 무엇입니까?
누가 "비트 맵 힙 스캔"의 기본 원리를 설명 할 수 있습니까?
"Bitmap heap scan"의 원칙을 알고 싶습니다. 조건에서 OR
으로 쿼리를 실행하면 가 자주 발생한다는 것을 알고 있습니다.쿼리 계획에서 "비트 맵 힙 스캔"이란 무엇입니까?
누가 "비트 맵 힙 스캔"의 기본 원리를 설명 할 수 있습니까?
내가 잘못하지 않는 한 가장 좋은 설명은 알고리즘의 저자 인 from Tom Lane입니다. wikipedia article도 참조하십시오.
간단히 말해서, seq 스캔과 조금 다릅니다. 차이점은 모든 디스크 페이지를 방문하는 대신 비트 맵 인덱스 스캔 AND 및 OR 관련 인덱스를 함께 사용하고 필요한 디스크 페이지 만 방문한다는 것입니다.
인덱스 스캔은 디스크 페이지가 여러 번 방문 될 수 있음을 의미하는 인덱스 스캔 방식입니다.
다시 : 귀하의 의견에 질문 ... 네, 그게 정확히입니다.
인덱스 스캔은 행을 하나씩 거치며 필요한만큼 여러 번 디스크 페이지를 열어줍니다 (일부는 물론 메모리에 남아 있지만 그 점을 알 수 있습니다).
비트 맵 인덱스 검색은 디스크 페이지의 짧은 목록을 순차적으로 열어 각각의 적용 가능한 모든 행을 가져옵니다 (따라서 쿼리 계획에 표시된 다시 검사 조건).
참고로, 클러스터링/행 순서가 두 방법 중 하나의 관련 비용에 미치는 영향을 참고하십시오. 행이 임의의 순서로 모든 장소에 있으면 비트 맵 인덱스가 더 저렴 해집니다. 실제로 비트 맵 인덱스 스캔은 약간의 오버 헤드가 없으므로 실제로는 모두 인 경우 seq 스캔은 가장 저렴합니다.
따라서 "비트 맵 힙 스캔": 페이지 한 번 이상 방문 할 수 없습니다! 그러나 "색인 수": 색인은 한 행씩 순서대로 방문되기 때문에 두 번 이상 방문 할 수 있습니다. – francs