Postgresql如何使用
如何使用 @>
運算符優化 PostgreSQL 中文本數組的查詢
我有一列類型
text[]
,我想使用此 SQL 運算符搜尋此列@>
注意:
@>
運算符,它會過濾數據$$ ‘a’,‘b’ $$在$$ ‘a’,‘b’,‘c’ $$
> > 返回的對象將是那些傳遞的值是數據子集的對象 > > >
但問題是整數比較比字元串比較好。
我正在考慮另一種方式,也許如果 Postgres 對這些值進行雜湊處理,然後再進行比較。
請注意,我不能使用索引,因為不僅只有一列,而且查詢將首先過濾某個 id,然後它需要過濾那些多值列。
我的問題,Postgresql 中是否有一些功能支持比較整數而不是字元串。
如果字元串來自受限集,您可以定義 ENUM 數據類型。這在幕後將字元串轉換為整數。
create type alph as enum ( 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'); create table j as select floor(random()*100)::int, array_agg(substring('abcdefghijklmnopqrstuvwxyz',floor(random()*26)::int+1,1)) from generate_series(1,10000000) f(x) group by x%1000000; create table j2 as select floor, array_agg::alph[] from j;
通過執行以下操作,我的速度提高了大約 2 倍:
select * from j2 where array_agg @> '{a,b}';
而不是
select * from j where array_agg @> '{a,b}';
如果我包含條件
and floor=7
(在“地板”上創建索引之後),那麼兩個查詢都非常快,以至於無法可靠地檢測到任何速度差異。對我來說,這似乎是過早優化的本質。