Postgresql HStore 插件试用小结
一, 安装
环境介绍:官方说postgresql 9.3 版本之后支持HStore 插件,目前最新版本10.3
本次测试版本:10.1 或 9.6.2
进入psql 运行环境,使用管理员(高级别用户)进入服务器,连接某个应用数据库。
# \c 命令,数据库名 , 高级别用户 \c databasename postgres; # 启用插件 create extension hstore; # 切换普通用户 \c databasename ir_user; # 察看Hstore 使用情况 \dT hstore;
二, 使用Hstore
新增列(Hstore)
alter table tbl_name add column column_name hstore;
给列赋值
update tbl_name set column_name =('exp=>' || exp || ', wealth=>' || wealth )::hstore;
查询
Select * from tbl_name where column_name ? 'exp’
修改
Select * from tbl_name where column_name || ‘exp=>new_value’::hstore
新增
Select * from tbl_name where column_name || ‘exp2=>value2’::hstore
删除
Select * from tbl_name where column_name - ‘exp2’
三, 性能测试
a) 数据准备,分拣平台2kw条子域名数据,列(20个)
数据表 1 : select * from test.tmp_jackical_hstore2 limit 2;
数据表2 : select * from test.bt_sub_domain limit 2;
测试sql1(hstore) : select * from test.tmp_jackical_hstore2 where domain_hstore2 ? 'zcrbjx.cn.china.cn';
测试sql2 :select * from test.bt_sub_domain where domain_name = 'zcrbjx.cn.china.cn';
两个表都没有加索引 语句1 : 17.561 s
语句2: 5.219 s
b) 追加索引
给 hstore 列加上 gist 索引
CREATE INDEX ***** ON test.tmp_jackical_hstore2 USING gist(domain_hstore2);
给 没有hstore 的表加 btree 索引 :
CREATE INDEX **** ON test.bt_sub_domain USING btree(domain_name );
再次测试 语句1 : 7 s 左右
语句2 : 0.122 s
被正常数据秒杀了。。。
继续优化 ....
c) 再次给Hstore查询条件加索引
给 hstore 列继续 加上 btree 索引 : CREATE INDEX **** ON test.tmp_jackical_hstore2 USING btree(hstore_keys(domain_hstore2));
到目前未知,己给hstore 这列加了,gist 与 btree索引 了,来看看性能吧。
测试语句1: select * from test.tmp_jackical_hstore2 where hstore_keys(domain_hstore2) = 'zcrbjx.cn.china.cn';
测试语句2: select * from test.bt_sub_domain where domain_name = 'zcrbjx.cn.china.cn';
再再次测试 语句1 : 0.122s
语句2 : 0.122s
结论:Hstore 提供key-value 保存形式,但性能不大好,需要加入有针对性查询的索引才能提高性能。
附函数:hstore_keys
CREATE OR REPLACE FUNCTION "test"."hstore_keys"("field" hstore)
RETURNS "pg_catalog"."text" AS $BODY$
select array_to_string(akeys($1),',');
$BODY$
LANGUAGE 'sql' IMMUTABLE COST 100
;
ALTER FUNCTION "test"."hstore_keys"("field" hstore) OWNER TO "ir_user";
官方语法:https://www.postgresql.org/docs/9.6/static/hstore.html
Postgresql HStore 插件试用小结的更多相关文章
- JQuery插件使用小结
JQuery插件使用小结
- uploadify在asp.net中的试用小结
花了差不多一下午的时间,总算把uploadify插件运行起来,在此对自己遇到的问题以及过程做一个小结. 一.使用步骤 1.在官网下载最新的插件包,并将包解压. 2.新建asp.net web项目,将解 ...
- PostgreSQL常用插件收集
hexdump -C 数据表文件 -- 查看表文件中数据. pg_stat_statements pgcompacttable -- 在减少锁的情况下,清理表和索引的老空间. pg_repack--P ...
- postgresql 安装插件
最近由于工作需要,学习了citusdata 插件,在按照官方文档装好postgresql 之后,不能在psql 中正常启用其它插件 如 : "create extension pg_trg ...
- PostgreSQL hstore 列性能提升一例
PostgreSQL 支持hstore 来存放KEY->VALUE这类数据, 事实上也相似于ARRAY或者JSON类型. 要高效的使用这类数据,当然离不开高效的索引.我们今天就来看看两类不同的 ...
- fullpage.js全屏滚动插件使用小结
刚做好公司网站,通过全屏滚动,显著提高了官网的浏览体验.遂总结一下使用fullpage.js的方法.欢迎指正 一. fullpage.js简介 fullpage.js是一套实现浏览器全屏滚动的js插件 ...
- javascript插件编写小结
写JS插件,最好是先通过HTML方式将展示结果显示出来,然后再封装成JS插件,将其画出来.JS模板如下: (function($){ $.fn.fnName = function(options){ ...
- jquery validate 插件使用小结
项目中整合了jquery validate插件,仿照别人的使用写了我的表单验证,结果不起作用.然后就各种找原因. 在网上下了jquery validate插件的完整包,看了看里边的例子,跟我的使用貌似 ...
- 阿里巴巴Java规约插件试用
阿里Java开发规约Eclipse插件介绍 阿里巴巴集团配合<阿里巴巴Java开发手册>PDF终极版开发的IDE插件,目前包括IDEA插件.Eclipse插件. 安装 检查环境 插件要求: ...
随机推荐
- 火狐浏览器对svg支持的一点不足
项目中要用svg实现一个如下图所示的风机扇叶转动效果 当用chrome浏览器打开,动画显示正常.用火狐浏览器打开扇叶静止不动,代码如下: <svg xmlns:cge="http:// ...
- 使用 ruamel.yaml 读写 yaml 文档
官网链接: https://pypi.org/project/ruamel.yaml/ 1. 安装ruamel.yaml pip install ruamel.yaml 2. 准备yaml文件: Ch ...
- C++课堂作业二之反转链表
1问题链接: https://www.patest.cn/contests/pat-b-practise/1025 2解题想法: 这题原来用数组打过,现在是想保留暂存数据的数组,然后按顺序提取出来到创 ...
- jQuery——checkbox
全选.全部选 $('#checkAll').click(function(){ $('input[name="subBox"]').prop("checked" ...
- [HNOI2010]公交线路
题目 发现\(n\)比较大,但是\(k,p\)都很小,考虑矩乘使得复杂度倾斜一下 发现所有车的最大间隔都是\(p\),还保证\(k<p\),于是我们可以考虑压下最后\(p\)位的情况 于是设\( ...
- windows下搭建nginx+php开发环境
windows下搭建nginx+php开发环境 1.前言 windows下大多我们都是下载使用集成环境,但是本地已经存在一个集成环境,但不适合项目的需求.因此准备再自己搭建一个环境. 2.准备 工具: ...
- C# - 静态类和静态构造函数
一个类只能有一个静态构造函数,该构造函数不能有访问修饰符,不能带任何参数,不能直接调用,只能在: 1 创建包含静态构造函数的类实例时 2 访问包含静态构造函数的静态成员时 会先调用静态构造函数,无论创 ...
- Android——sqlite3 基本命令操作
平时用到database的地方不多,这里记录一下shell终端下直接对db的基本操作! 撰写不易,转载请注明出处:http://blog.csdn.net/jscese/article/details ...
- 分布式消息通信ActiveMQ
消息中间件 消息中间件是指利用高效可靠的消息传递机制进行平台无关的数据交流,并且基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,可以在分布式架构下扩展进程之间的通信. 消息中间件能 ...
- [jQuery]常用正则表达式
验证网址:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$电子 ...