安装hstore扩展:
postgres=# create extension hstore; CREATE EXTENSION postgres=#
进行测试:
建表:
postgresINSERT INTO hstore_test (data) VALUES ('"key1"=>"value1","key2"=>"value2","key3"=>"value3"'); INSERT 0 1 postgresselect * from hstore_test; item_id | data ---------+------------------------------------------------------ 1 | "key1"=>"value1","key2"=>"value2","key3"=>"value3" (1 row) postgres=#
修改数据:
(3 rows)
Postgresql 支持hstore 来存放KEY->VALUE这类数据, 其实也类似于ARRAY或者JSON类型。 要高效的使用这类数据,当然离不开高效的索引。我们今天就来看看两类不同的索引对于同一种检索请求的性能问题。
假如我们有这样一个原始表,基于str1字段有一个BTREE索引。
里面有10W条记录。 数据大概如下,
- t_girl=#select*fromstatus_checklimit2;
- is_yes|str1|str2
- --------+------+----------------------
- f|0|cfcd208495d565ef66e7
- t|1|c4ca4238a0b923820dcc
- (2rows)
- Time
存放hstore类型的status_check_hstore 表结构,基于str1_str2字段有一个GIST索引。
- Table"ytt.status_check_hstore"
@H_63_502@Column|Type|Modifiers
- -----------+---------+-----------
- is_yes|boolean|
- str1_str2|hstore|
- "idx_str_str2_gist"gist(str1_str2)