Bir sorgu planında "Bitmap yığın taraması" nedir?


113

"Bit eşlem yığın taraması" ilkesini bilmek istiyorum, bunun genellikle ORkoşulda bir sorgu yürüttüğümde olduğunu biliyorum .

"Bitmap yığın taraması" nın ardındaki prensibi kim açıklayabilir?

Yanıtlar:


122

En iyi açıklama , yanılmıyorsam algoritmanın yazarı olan Tom Lane'den geliyor . Ayrıca wikipedia makalesine bakın .

Kısacası, biraz sıra taraması gibidir. Aradaki fark, her disk sayfasını ziyaret etmek yerine, bir bitmap dizininin VE ve VEYA ilgili dizinleri birlikte taraması ve yalnızca ihtiyaç duyduğu disk sayfalarını ziyaret etmesidir.

Bu, dizinin sırayla sırayla ziyaret edildiği bir dizin taramasından farklıdır - yani bir disk sayfası birden çok kez ziyaret edilebilir.


Re: Yorumunuzdaki soru ... Evet, aynen öyle.

Bir dizin taraması, sıraları tek tek geçecek, disk sayfalarını gerektiği kadar tekrar tekrar açacaktır (bazıları elbette hafızada kalacak, ama sen anladın).

Bir bitmap dizin taraması, sırayla disk sayfalarının kısa bir listesini açar ve her birindeki uygulanabilir her satırı alır (bu nedenle sorgu planlarında gördüğünüz sözde yeniden kontrol koşulu).

Bir kenara, kümeleme / satır sırasının her iki yöntemle ilişkili maliyetleri nasıl etkilediğine dikkat edin. Satırlar rastgele bir sırayla her yerde bulunuyorsa, bitmap dizini daha ucuz olacaktır. (Ve aslında, eğer gerçekten her yerde iseler , bir seq taraması en ucuz olacaktır, çünkü bir bitmap indeks taraması biraz ek yüke sahip değildir.)


O halde, "Bitmap heap scan": Bir sayfa birden fazla ziyaret edilemez! ancak "Dizin Yapılabilir": Bir sayfa birden çok kez ziyaret edilebilir, çünkü dizin sırayla satır satır ziyaret edilir.
frank

Sayfalar birden çok kez ziyaret edildiğinde muhtemelen önbellekleme söz konusudur: sayfa aslında ilk kez diskten yüklenecek (yavaş) ve daha fazla erişim, bellekteki önbelleğe (Postgres önbelleği (hızlı) veya işletim sistemi önbelleği (daha hızlı)) çarpacaktır. .
Matthieu

Ayrıca index-only scansorguda yalnızca indekslenmiş sütuna erişildiği zaman vardır . bu durumda, index-only scanyığın (veri sayfası) verilerine erişmesi gerekmez: postgresql.org/docs/12/indexes-index-only-scans.html
Alan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.