2012-09-25 74 views
1

例如,我存儲interests喬爲chemistryclassical-music(如兩個單獨的值),並且可以查詢該表像where interests in ('chemistry', 'biochem'),它會使用索引來有效地找到人如喬。postgreSQL索引是否有多值字段?

PostgreSQL有這樣一個數據類型,可以索引多個值以允許高級查詢嗎?查詢的性能優勢是什麼?什麼是重要的告誡

+2

爲什麼你不正常化你的設計?存儲逗號分隔值幾乎不是一個好主意。 –

+0

我明白它在傳統數據庫中不好,因爲它不會索引多個值。但我只是覺得DB必須提供這個功能。但我更新了這個關於警告的問題,感謝你:-) – aitchnyu

+1

問題是誤導/措辭不佳。您在問是否可以在包含逗號分隔值的文本字段中對值進行索引。 –

回答

2

如果使用數組類型,它可以被索引和索引都可以使用,檢查這個話題:Can PostgreSQL index array columns?

更好的數據模型可能是一個更好的主意,但是這取決於你。

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'; 

這是一個黑客攻擊的一位,因爲hstore數據類型用來存儲鍵/值對,在這種情況下,您只需要鍵。