【发布时间】:2017-08-15 19:28:30
【问题描述】:
我有一个包含一个布尔列的表。
productid integer
isactive boolean
当我执行查询时
SELECT productid
FROM
product
WHERE ispublish
LIMIT 15 OFFSET 0
之后,我为ispublish 列创建了一个索引:
CREATE INDEX idx_product_ispublish ON product USING btree (ispublish)
然后重新执行
SELECT productid
FROM
product
WHERE ispublish
LIMIT 15 OFFSET 0
结果:
=> 没有区别
我已经尝试了以下,但结果是一样的:
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
谁能给我解释一下?
【问题讨论】:
-
试试
CREATE INDEX ... ON product (productid) WHERE ispublish- 这应该会触发仅索引扫描(对于您的特定查询;至少在大多数情况下:这取决于您有多少行 f.ex.)。 -- 部分索引的WHERE子句中的谓词必须 匹配查询的谓词才能使用。WHERE ispublish、WHERE ispublish = TRUE和WHERE ispublish IS TRUE是 3 个不同的谓词。
标签: postgresql boolean database-indexes