PostgreSQL何时自动为表创建位图索引?

PostgreSQL何时自动为表创建位图索引?,postgresql,bitmap-index,Postgresql,Bitmap Index,PostgreSQL何时自动为表创建位图索引 我从中看到了以下示例,并想知道为什么在何处更改值会产生不同?谢谢 EXPLAIN SELECT * FROM tenk1 WHERE unique1 < 7000; QUERY PLAN ------------------------------------------------------------ Seq Scan on tenk1 (cost=0.00..483.00 rows=

PostgreSQL何时自动为表创建位图索引

我从中看到了以下示例,并想知道为什么在何处更改值会产生不同?谢谢

EXPLAIN SELECT * FROM tenk1 WHERE unique1 < 7000;
                         QUERY PLAN
------------------------------------------------------------
 Seq Scan on tenk1  (cost=0.00..483.00 rows=7001 width=244)
   Filter: (unique1 < 7000)


Postgres没有位图索引

您看到的是一个索引扫描,在扫描索引时使用位图

在邮件列表上可以很好地解释这一点:

普通索引扫描每次从索引中获取一个元组指针,并立即访问表中的该元组。位图扫描一次性从索引中获取所有元组指针,使用内存中的位图数据结构对它们进行排序,然后按物理元组位置顺序访问表元组


有关更详细的解释,请参见此问题。

谢谢。1如果我正确理解你的回复和链接,它是B+树索引和位图的组合?2在我看来,位图是为搜索键的特定值创建的,所以只用于相等选择条件?位图如何用于范围选择条件,例如,其中unique1<7000?3为什么更改WHERE unique1<7000 t WHERE unique1<100会使postgresql从只使用B+树索引变为使用组合?谢谢。在位图扫描中,4使用内存中的位图数据结构对它们进行排序,这是否意味着根据元组的搜索键值对元组指针进行排序?5是对所有查询进行一次排序,还是对每个查询进行一次排序?在我看来,由于排序的原因,位图扫描比普通索引扫描更耗时。
EXPLAIN SELECT * FROM tenk1 WHERE unique1 < 100;
                                  QUERY PLAN
------------------------------------------------------------------------------
 Bitmap Heap Scan on tenk1  (cost=5.07..229.20 rows=101 width=244)
   Recheck Cond: (unique1 < 100)
   ->  Bitmap Index Scan on tenk1_unique1  (cost=0.00..5.04 rows=101
 width=0)
         Index Cond: (unique1 < 100)