Postgres 9.5如何支持布尔杜松子酒索引

时间:2017-06-12 08:03:31

标签: postgresql postgresql-9.5

由于9.5中的btree_gin不支持布尔数据类型,我如何使用布尔列作为多列gin索引的一部分?

1 个答案:

答案 0 :(得分:0)

从技术上讲,它是可能的,但您需要索引(is_read::int::bit)表达式(而不是直接列)。 但是:您需要在WHERE子句中使用此表达式来使用此索引;即:

WHERE is_read::int::bit = '1'
-- or
WHERE is_read::int::bit = '0'
-- or even
WHERE is_read::int::bit < '1' -- which is just an obfuscated version of "= '0'"

但是,这会降低您的查询的可读性。甚至可能更慢(见后文)。

如果您查询过一个值(例如WHERE is_readWHERE NOT is_read,但不是两者都有),则partial index会更合适。

但是,从索引中删除列可能会使(在某种程度上)更紧凑,甚至可以在某些情况下加快查询。

我建议您根据实际数据测试这些方法,或向我们展示(在另一个后续问题中)您所关注的查询。

以下是对上述案例与一些相当人为的数据的比较:
http://rextester.com/OWXUA55980