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

时间:2018-06-20 01:27:13

标签: postgresql bitmap-index

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

我从PostgreSQL' documentation看了以下示例,想知道为什么在WHERE中更改值会有所作为?谢谢。

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)

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)

1 个答案:

答案 0 :(得分:4)

Postgres没有“位图索引”。

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

邮件列表上的

Tom Lane's answer对此进行了很好的解释:

  

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

有关更多详细说明,另请参见问题https://dba.stackexchange.com/questions/119386