例如,我将interests
Joe 存储为chemistry
和classical-music
(作为两个单独的值),您可以像查询表一样where interests in ('chemistry', 'biochem')
,它将使用索引有效地找到像 Joe 这样的人。
PostgreSQL 是否具有可以索引多个值以允许高级查询的数据类型?查询的性能优势是什么?什么是重要的警告?
例如,我将interests
Joe 存储为chemistry
和classical-music
(作为两个单独的值),您可以像查询表一样where interests in ('chemistry', 'biochem')
,它将使用索引有效地找到像 Joe 这样的人。
PostgreSQL 是否具有可以索引多个值以允许高级查询的数据类型?查询的性能优势是什么?什么是重要的警告?
如果你使用数组数据类型,它可以被索引并且可以使用索引,查看这个主题:PostgreSQL可以索引数组列吗?
更好的数据模型可能是一个更好的主意,但这取决于您。
您可以为此使用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
数据类型旨在存储键/值对,在这种情况下,您只需要键。