首页
解决方案
技术服务
专业数据库维保服务 大数据维保服务
一体机
Oracle数据库一体机 PolarDB数据库一体机 瀚高数据库一体机 崖山数据库一体机 海扬数据库一体机 高斯数据库一体机 金仓数据库一体机
产品
CLup乘数云统一平台 CData高性能数据库云一体机 CPDA高性能双子星数据库机 CBackup数据库备份恢复云平台 CMiner: PostgreSQL中的CDC CSYun超融合虚拟机产品 ZQPool数据库连接池 ConshGuard数据保护产品 APCC: Greenplum管理平台
文档
文章
客户及伙伴
中启开源
关于我们
登录
×
修改密码

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

  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是谁的号码了。