例如,我存儲interests
喬爲chemistry
和classical-music
(如兩個單獨的值),並且可以查詢該表像where interests in ('chemistry', 'biochem')
,它會使用索引來有效地找到人如喬。postgreSQL索引是否有多值字段?
PostgreSQL有這樣一個數據類型,可以索引多個值以允許高級查詢嗎?查詢的性能優勢是什麼?什麼是重要的告誡?
例如,我存儲interests
喬爲chemistry
和classical-music
(如兩個單獨的值),並且可以查詢該表像where interests in ('chemistry', 'biochem')
,它會使用索引來有效地找到人如喬。postgreSQL索引是否有多值字段?
PostgreSQL有這樣一個數據類型,可以索引多個值以允許高級查詢嗎?查詢的性能優勢是什麼?什麼是重要的告誡?
如果使用數組類型,它可以被索引和索引都可以使用,檢查這個話題:Can PostgreSQL index array columns?
更好的數據模型可能是一個更好的主意,但是這取決於你。
您可以使用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';
這是一個黑客攻擊的一位,因爲hstore
數據類型用來存儲鍵/值對,在這種情況下,您只需要鍵。
爲什麼你不正常化你的設計?存儲逗號分隔值幾乎不是一個好主意。 –
我明白它在傳統數據庫中不好,因爲它不會索引多個值。但我只是覺得DB必須提供這個功能。但我更新了這個關於警告的問題,感謝你:-) – aitchnyu
問題是誤導/措辭不佳。您在問是否可以在包含逗號分隔值的文本字段中對值進行索引。 –