我们用一个例子来说明,假设有一张联系人表:

  1. CREATE TABLE contacts(
  2. id int primary key,
  3. name varchar(40),
  4. phone varchar(32)[],
  5. address text);

由于现在很多人都由多个手机号码,所以我们把手机号码的字段类型建成数组类型。
业务场景是我们需要查询某个号码是那个人的。

我们造一些测试数据:

  1. insert into contacts select seq, seq, array[seq+13600000000, seq+13600000001] from generate_series(1, 500000, 2) as seq;

然后数组类型的字段phone上建GIN索引:

  1. CREATE INDEX idx_contacts_phone on contacts using gin(phone);

注意建GIN索引的语法是“using gin(字段名)”。

查询我们用下面的SQL:

  1. SELECT * FROM contacts WHERE phone @> array['13600006688'::varchar(32)];

注意上面使用了操作符“@>”,表示包含,右边的表达式也应该是一个于phone字段类型相同的数组,所以我们写成“array[‘13600006688’::varchar(32)]”,注意“::varchar(32)”不能省略。

这样我们就查询出号码13600006688是谁的号码了。

本站文章,未经作者同意,请勿转载,如需转载,请邮件customer@csudata.com.
0 评论  
添加一条新评论