2

例如,我将interestsJoe 存储为chemistryclassical-music(作为两个单独的值),您可以像查询表一样where interests in ('chemistry', 'biochem'),它将使用索引有效地找到像 Joe 这样的人。

PostgreSQL 是否具有可以索引多个值以允许高级查询的数据类型?查询的性能优势是什么?什么是重要的警告

4

2 回答 2

3

如果你使用数组数据类型,它可以被索引并且可以使用索引,查看这个主题:PostgreSQL可以索引数组列吗?

更好的数据模型可能是一个更好的主意,但这取决于您。

于 2012-09-25T10:12:38.147 回答
1

您可以为此使用hstore数据类型。您只会存储键,而不是值。可以对 hstore 列进行索引,并且测试是否存在键非常快。

就像是:

create table person 
(
   person_id integer not null primary key,
   name text not null,
   interests hstore
);

insert into person (person_id, name, interests)
values 
(1, 'Joe', 'chemistry => NULL, biochem => null'::hstore);

然后要找到有特定兴趣的人,您可以使用:

select *
from person
where interests ? 'chemistry'
   or interests ? 'biochem';

这有点像 hack,因为hstore数据类型旨在存储键/值对,在这种情况下,您只需要键。

于 2012-09-25T10:44:07.957 回答