PostgreSQL中的反轉索引(GIN)
阿新 • • 發佈:2018-12-12
索引是一種快速查詢資料的方法,它記錄了表中一列或多列與其物理位置之間的對應關係。常用的索引有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)];
執行結果: