Yanlış anlamalarımı aşağıdaki örnekle açıklamaya çalışacağım.
Anlamadığım temellerini ait Bitmap Heap Scan Node
. SELECT customerid, username FROM customers WHERE customerid < 1000 AND username <'user100';
Planı şunun olduğu sorguyu düşünün :
Bitmap Heap Scan on customers (cost=25.76..61.62 rows=10 width=13) (actual time=0.077..0.077 rows=2 loops=1)
Recheck Cond: (((username)::text < 'user100'::text) AND (customerid < 1000))
-> BitmapAnd (cost=25.76..25.76 rows=10 width=0) (actual time=0.073..0.073 rows=0 loops=1)
-> Bitmap Index Scan on ix_cust_username (cost=0.00..5.75 rows=200 width=0) (actual time=0.006..0.006 rows=2 loops=1)
Index Cond: ((username)::text < 'user100'::text)
-> Bitmap Index Scan on customers_pkey (cost=0.00..19.75 rows=1000 width=0) (actual time=0.065..0.065 rows=999 loops=1)
Index Cond: (customerid < 1000)
Benim bu düğümü anladım :
Orada açıklandığı gibi , bitmap heap scan
tablo bloklarını sıralı olarak okur, bu nedenle tam da olduğu gibi gerçekleşen rastgele tablo erişimi ek yükü üretmez Index Scan
.
Yaptıktan sonra Index Scan
, PostgreSQL gereksiz yere kaçınmak için heap blocks reads
(ya hits
da sıcak önbellek varsa) sıraları nasıl en iyi şekilde alacağını bilmiyor . Bunu çözmek için , benim durumumda indekslerden iki bitmap üreterek ve bunları gerçekleştirerek Bitmap Index Scan
adı verilen yapıyı ( ) bitmap
oluşturur BITWISE AND
. Bitmap oluşturulduğundan, masayı sıralı bir sırayla en uygun şekilde okuyabilir, gereksiz yere kaçınır heap I/O-operations
.
Bir çok sorunun geldiği yer orası.
SORU: Sadece bir bitmap var. PostgreSQL, sadece bir bitmap ile satırların fiziksel düzeniyle ilgili herhangi bir şeyi nasıl bilir? Veya bitmap'i oluşturur, böylece herhangi bir öğesi işaretçiye kolayca bir sayfaya eşlenebilir mi? Eğer öyleyse, bu her şeyi açıklıyor, ama bu sadece benim tahminim.
Öyleyse, bitmap heap scan -> bitmap index scan
bunun sıralı bir tarama gibi olduğunu ancak yalnızca tablonun uygun kısmının olduğunu söyleyebilir miyiz ?
001001010101011010101
. Ya da aslında önemli değil ve tek bilmemiz gereken bitmap ile oldukça hızlı bir şekilde bir blok bulabilmesi ...?