代码之家  ›  专栏  ›  技术社区  ›  Tim unnamed eng

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

  •  0
  • Tim unnamed eng  · 技术社区  · 7 年前

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

    我从 PostgreSQL' documentation ,并且想知道为什么要更改在哪里可以产生影响的值?谢谢。

    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 回复  |  直到 7 年前
        1
  •  4
  •   a_horse_with_no_name    7 年前

    Postgres没有“位图索引”。

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

    Tom Lane's answer 在邮件列表上解释得很好:

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

    另见这个问题 https://dba.stackexchange.com/questions/119386 更详细的解释。