我的表有1个布尔列。
productid integer
isactive (boolean)
执行查询时
SELECT productid
FROM
product
WHERE ispublish
LIMIT 15 OFFSET 0
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
=>没有不同 我已经受到了审判 但结果是一样的
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
谁可以向我解释一下?
答案 0 :(得分:21)
只有当PostgreSQL认为它会更便宜时才会使用索引。
几乎永远不会使用boolean
列的索引,它只能使用两个可能的值,因为顺序读取整个表比在索引和表上使用随机I / O更便宜必须检索表的高优势。
boolean
列上的索引仅有用
在数据仓库方案中,可以通过位图索引扫描与其他索引结合使用。
如果表格中只有一小部分的值为TRUE
(或FALSE
)。在这种情况下,最好创建部分索引,如
CREATE INDEX ON mytab((1)) WHERE boolcolumn;