我的表有1个布尔列.
productid integer
isactive (boolean)
Run Code Online (Sandbox Code Playgroud)
执行查询时
SELECT productid
FROM
product
WHERE ispublish
LIMIT 15 OFFSET 0
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
=>没有差别我已经尝试但结果是一样的
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
Run Code Online (Sandbox Code Playgroud)
谁能向我解释一下?
Lau*_*lbe 45
只有当PostgreSQL认为它会更便宜时才会使用索引.boolean
几乎永远不会使用列上的索引,它只能使用两个可能的值,因为顺序读取整个表比在索引和表上使用随机I/O更便宜,如果表的高优点必须被检索.
boolean
列上的索引仅有用
在数据仓库方案中,它可以通过位图索引扫描与其他索引组合.
如果表中只有一小部分具有该值TRUE
(或者FALSE
就此而言).在这种情况下,最好创建一个部分索引像
CREATE INDEX ON mytab((1)) WHERE boolcolumn;
Run Code Online (Sandbox Code Playgroud)