postgresql - Postgres 9.5 如何支持 boolean gin 索引

标签 postgresql postgresql-9.5

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

最佳答案

从技术上讲,这是可能的,但您需要索引 (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

关于postgresql - Postgres 9.5 如何支持 boolean gin 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44494299/

相关文章:

sql - 设计带有类型的组和带有类型的项目,其中项目类型与组类型相关

sql - 我怎样才能始终以某种格式获取时间戳,而不必每次都明确定义它

database - ON CONFLICT DO UPDATE/DO NOTHING 不在 FOREIGN TABLE 上工作

postgresql - 两个工作日(周一至周五)之间的统计数据

postgresql - PostgreSQL Upsert使用系统列XMIN,XMAX和其他来区分插入和更新的行

PostgreSQL:无法使用 pgAdmin III Restore 恢复 .backup

postgresql - 将 PostgreSQL hstore 用于 i18n

shell - -su : syntax error near unexpected token '('

ruby - Rails 3 - ActiveRecord,什么更有效率(更新与计数)?

database - pgAdmin 9.5 没有显示所有数据库