加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

PostgreSQL何故支持富厚的NoSQL特征?

发布时间:2018-10-12 16:07:26 所属栏目:编程 来源:DBAplus社群
导读:【新品产上线啦】51CTO播客,随时随地,碎片化进修 作者先容 谭峰,网名francs,中国开源软件推进同盟PostgreSQL分会特聘专家,《PostgreSQL拭魅战》作者之一,《PostgreSQL 9 Administration Cookbook》译者之一。现就职于浙江移动认真应用上云架构管控以及

按照以上看出,查询表tbl_user_json的user_info字段id键值在1到10000范畴内的记录走了索引,而且执行时刻为27.092毫秒,接着测试tbl_user_jsonb表同样SQL的检索机能,如下所示:

  1. mydb=> EXPLAIN ANALYZE SELECT id,user_info->'id',user_info->'user_name'  
  2. FROM tbl_user_jsonb  
  3. Bitmap Heap Scan on tbl_user_jsonb (cost=158.93..14316.93 rows=10000 width=68) (actual time=1.140..8.116 rows=9998 loops=1)  
  4. Heap Blocks: exact=393  
  5. -> Bitmap Index Scan on idx_gin_user_infob_id (cost=0.00..156.43 rows=10000 width=0) (actual time=1.058..1.058 rows=18992 loops =1)  
  6. Planning time: 0.104 ms  
  7. Execution time: 8.656 ms  
  8. (7 rows) 

按照以上看出,查询表tbl_user_jsonb的user_info字段id键值在1到10000范畴内的记录走了索引而且执行时刻为8.656毫秒,从这个测试看出jsonb检索比json服从高。

从以上两个测试看出,正好验证了“json写入比jsonb快,但检索时比jsonb慢”的概念,值得一提的是假如必要通过key/value举办检索,譬喻以下:

  1. SELECT * FROM tbl_user_jsonb WHERE user_info @> '{"user_name": "2_francs"}'; 

这时执行打算为全表扫描,如下所示:

  1. mydb=> EXPLAIN ANALYZE SELECT * FROM tbl_user_jsonb WHERE user_info @> '{"user_name": "2_francs"}';  
  2. QUERY PLAN  
  3. ------------------------------------------------------------------------------------  
  4. Seq Scan on tbl_user_jsonb (cost=0.00..67733.00 rows=2000 width=143) (actual time=0.018..582.207 rows=1 loops=1)  
  5. Filter: (user_info @> '{"user_name": "2_francs"}'::jsonb)  
  6. Rows Removed by Filter: 1999999  
  7. Planning time: 0.065 ms  
  8. Execution time: 582.232 ms  
  9. (5 rows) 

从以上看出执行时刻为582毫秒阁下,在tbl_user_jsonb字段user_info上建设gin索引,如下所示:

  1. mydb=> CREATE INDEX idx_tbl_user_jsonb_user_Info ON tbl_user_jsonb USING gin(user_Info); 
  2. CREATE INDEX

索引建设后,再次执行以下,如下所示:

  1. Bitmap Heap Scan on tbl_user_jsonb (cost=37.50..3554.34 rows=2000 width=143) (actual time=0.079..0.080 rows=1 loops=1)  
  2. Recheck Cond: (user_info @> '{"user_name": "2_francs"}'::jsonb)  
  3. Heap Blocks: exact=1  
  4. -> Bitmap Index Scan on idx_tbl_user_jsonb_user_info (cost=0.00..37.00 rows=2000 width=0) (actual time=0.069..0.069 rows=1 loops=1)  
  5. Index Cond: (user_info @> '{"user_name": "2_francs"}'::jsonb)  
  6. Planning time: 0.094 ms  
  7. Execution time: 0.114 ms  
  8. (7 rows) 

从以上看出走了索引,而且执行时刻降落到了0.114毫秒。

这部门内容测试了json、jsonb数据范例读写机能差别,验证了json写入时比jsonb快,但检索时比jsonb慢的概念。

三、全文检索支持JSON和JSONB

接下来我们来先容PostgreSQL 10的一个新特征:全文检索支持json、jsonb数据范例。这部门我们会分两部门来声名,第一部门简朴先容PostgreSQL全文检索,第二部门演示全文检索对json、jsonb数据范例的支持。

1、PostgreSQL全文检索简介

对付大大都应用全文检索很少放到数据库中实现,一样平常行使单独的全文检索引擎,譬喻基于SQL全文检索引擎Sphinx。PostgreSQL支持全文检索,对付局限不大的应用假如不想搭建专门的搜刮引擎,PostgreSQL的全文检索也可以满意需求。

假如没有行使专门的搜刮引擎,大部检索必要通过数据库like操纵匹配,这种检索方法首要弱点在于:

  • 不能很好的支持索引,凡是需全表扫描检索数据,数据量大时检索机能很低;

  • 不提供检索功效排序,当输出功效数据量很是大时示意越发明明。

PostgreSQL全文检索能有用地办理这个题目,PostgreSQL全文检索通过以下两种数据范例来实现。

Tsvector

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读