Saya ingin mengetahui prinsip "Bitmap heap scan", saya tahu ini sering terjadi saat saya menjalankan kueri dengan OR
kondisi tersebut.
Siapa yang dapat menjelaskan prinsip di balik "Pemindaian heap bitmap"?
Saya ingin mengetahui prinsip "Bitmap heap scan", saya tahu ini sering terjadi saat saya menjalankan kueri dengan OR
kondisi tersebut.
Siapa yang dapat menjelaskan prinsip di balik "Pemindaian heap bitmap"?
Penjelasan terbaik datang dari Tom Lane , yang merupakan penulis algoritme kecuali saya salah. Lihat juga artikel wikipedia .
Singkatnya, ini seperti pemindaian seq. Perbedaannya adalah, daripada mengunjungi setiap halaman diska, indeks bitmap memindai indeks-indeks ANDs dan OR yang berlaku bersama-sama, dan hanya mengunjungi halaman disk yang diperlukan.
Ini berbeda dari pemindaian indeks, di mana indeks dikunjungi baris demi baris secara berurutan - artinya halaman disk dapat dikunjungi beberapa kali.
Re: pertanyaan dalam komentar Anda ... Ya, itu saja.
Pemindaian indeks akan melewati baris satu per satu, membuka halaman disk berulang kali, sebanyak yang diperlukan (beberapa tentu saja akan tetap ada di memori, tetapi Anda mengerti maksudnya).
Pemindaian indeks bitmap secara berurutan akan membuka daftar pendek halaman disk, dan mengambil setiap baris yang berlaku di masing-masing (karenanya disebut kondisi pemeriksaan ulang yang Anda lihat di rencana kueri).
Perhatikan, sebagai tambahan, bagaimana pengelompokan / urutan baris memengaruhi biaya terkait dengan metode mana pun. Jika baris berada di semua tempat dalam urutan acak, indeks bitmap akan lebih murah. (Dan, pada kenyataannya, jika mereka benar-benar semua tempat, scan seq akan termurah, karena scan indeks bitmap bukan tanpa beberapa overhead.)
index-only scan
saat hanya kolom yang diindeks diakses dalam kueri. dalam hal ini,index-only scan
tidak perlu mengakses data heap (halaman data): postgresql.org/docs/12/indexes-index-only-scans.html