Chcę poznać zasadę „skanowania sterty bitmap”, wiem, że to się często zdarza, gdy wykonuję zapytanie z OR
warunkiem.
Kto może wyjaśnić zasadę działania „skanowania sterty mapy bitowej”?
Chcę poznać zasadę „skanowania sterty bitmap”, wiem, że to się często zdarza, gdy wykonuję zapytanie z OR
warunkiem.
Kto może wyjaśnić zasadę działania „skanowania sterty mapy bitowej”?
Najlepsze wyjaśnienie pochodzi od Toma Lane'a , który jest autorem algorytmu, chyba że się mylę. Zobacz także artykuł na Wikipedii .
Krótko mówiąc, to trochę jak skanowanie sekwencyjne. Różnica polega na tym, że zamiast odwiedzać każdą stronę dysku, indeks bitmapowy skanuje razem odpowiednie indeksy AND i OR i odwiedza tylko te strony dysku, które są potrzebne.
Różni się to od skanowania indeksu, w którym indeks jest odwiedzany wiersz po wierszu w kolejności - co oznacza, że strona dysku może być odwiedzana wiele razy.
Re: pytanie w twoim komentarzu ... Tak, to jest to.
Skanowanie indeksu przejdzie przez kolejne wiersze, otwierając ponownie strony na dysku tyle razy, ile będzie to konieczne (niektóre oczywiście pozostaną w pamięci, ale o co chodzi).
Skanowanie indeksu mapy bitowej po kolei otworzy krótką listę stron dysku i pobierze każdy odpowiedni wiersz w każdym z nich (stąd tak zwany warunek ponownego sprawdzenia, który widzisz w planach zapytań).
Na marginesie należy zwrócić uwagę, jak grupowanie / kolejność wierszy wpływa na koszty powiązane z każdą z metod. Jeśli wiersze są rozmieszczone w losowej kolejności, indeks bitmapy będzie tańszy. (I faktycznie, jeśli są naprawdę wszędzie , skanowanie sekwencyjne będzie najtańsze, ponieważ skanowanie indeksu mapy bitowej nie jest pozbawione narzutu).
index-only scan
sytuacja, w której w zapytaniu jest dostępna tylko indeksowana kolumna. w tym przypadkuindex-only scan
nie ma potrzeby dostępu do danych sterty (strony danych): postgresql.org/docs/12/indexes-index-only-scans.html