1. 程式人生 > >PostgreSQL中的反轉索引(GIN)

PostgreSQL中的反轉索引(GIN)

    索引是一種快速查詢資料的方法,它記錄了表中一列或多列與其物理位置之間的對應關係。常用的索引有B-tree,Hash等。本文將介紹GIN,即:反轉索引。

    反轉索引(GIN)可以處理包含多個鍵的值,如陣列。可以通過定義GIN索引的特定操作符實現不同的功能。GIN的標準中定義了用於一維陣列的操作符,如包含“@>”,被包含“<@”,相等“=”,重疊操作符“&&”。

1.建表

   建立一個person表,包含id,name和phone。由於一個人可能有多個電話號碼,所以將phone定義為一個數組。

create table person (
  id  int, 
  name varchar(20),
  phone varchar(32)[]
);

2.建索引

   想要按照電話號碼做快速查詢,如查一個號碼屬於誰,就需要建立一個GIN索引。

create index idx_phone on person using gin(phone);

3.插入資料

insert into person values(1,'April','{"0000000","1234567"}');
insert into person values(2,'Harris','{"1111111","7654321"}');

4.查詢

   查詢號碼‘1111111’屬於誰,“@>”是陣列的操作符,表示“包含”的意思,GIN索引能在“@>”上起作用。

select * from person where phone @> array['1111111'::varchar(32)];

  執行結果: