Postgres SQL:为布尔列创建索引

时间:2017-03-23 10:00:09

标签: postgresql

我的表有1个布尔列。

productid integer
isactive (boolean)

执行查询时

SELECT productid   
    FROM 
    product  
    WHERE ispublish
    LIMIT 15 OFFSET  0

enter image description here

Affter我为ispublish

创建了索引
CREATE INDEX idx_product_ispublish ON product USING btree (ispublish)

re execute
SELECT productid   
       FROM 
       product  
       WHERE ispublish
       LIMIT 15 OFFSET  0
result 

enter image description here

=>没有不同 我已经受到了审判 但结果是一样的

CREATE INDEX idx_product_ispublish ON product USING btree (ispublish)

CREATE INDEX idx_product_ispublish ON product USING btree (ispublish)

CREATE INDEX idx_product_ispublish ON product (ispublish) WHERE ispublish is TRUE

谁可以向我解释一下?

1 个答案:

答案 0 :(得分:21)

只有当PostgreSQL认为它会更便宜时才会使用索引。 几乎永远不会使用boolean列的索引,它只能使用两个可能的值,因为顺序读取整个表比在索引和表上使用随机I / O更便宜必须检索表的高优势。

boolean列上的索引仅有用

  1. 在数据仓库方案中,可以通过位图索引扫描与其他索引结合使用。

  2. 如果表格中只有一小部分的值为TRUE(或FALSE)。在这种情况下,最好创建部分索引,如

    CREATE INDEX ON mytab((1)) WHERE boolcolumn;