Postgres 9.5 如何支持 boolean gin 索引
Postgres 9.5 how to support boolean gin index
由于9.5中的btree_gin
不支持boolean数据类型,如何使用boolean列作为多列gin索引的一部分?
从技术上讲,这是可能的,但您需要索引 (is_read::int::bit)
表达式(而不是直接列)。 But:您需要在 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_read
或 WHERE NOT is_read
,但不是两者),partial index 会更合适。
但是,从索引中删除该列可以使其(某种程度上)更紧凑,在某些情况下甚至可以加快查询速度。
我建议您在您的实际数据上测试这些方法中的每一种,或者向我们展示您关心的问题(在另一个后续问题中)。
以下是上述案例与一些相当虚假的数据的比较:
http://rextester.com/OWXUA55980
由于9.5中的btree_gin
不支持boolean数据类型,如何使用boolean列作为多列gin索引的一部分?
从技术上讲,这是可能的,但您需要索引 (is_read::int::bit)
表达式(而不是直接列)。 But:您需要在 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_read
或 WHERE NOT is_read
,但不是两者),partial index 会更合适。
但是,从索引中删除该列可以使其(某种程度上)更紧凑,在某些情况下甚至可以加快查询速度。
我建议您在您的实际数据上测试这些方法中的每一种,或者向我们展示您关心的问题(在另一个后续问题中)。
以下是上述案例与一些相当虚假的数据的比较:
http://rextester.com/OWXUA55980