Postgresql

如何使用 @> 運算符優化 PostgreSQL 中文本數組的查詢

  • October 12, 2019

我有一列類型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(在“地板”上創建索引之後),那麼兩個查詢都非常快,以至於無法可靠地檢測到任何速度差異。

對我來說,這似乎是過早優化的本質。

引用自:https://dba.stackexchange.com/questions/250923