按照以上看出,查询表tbl_user_json的user_info字段id键值在1到10000范畴内的记录走了索引,而且执行时刻为27.092毫秒,接着测试tbl_user_jsonb表同样SQL的检索机能,如下所示:
- mydb=> EXPLAIN ANALYZE SELECT id,user_info->'id',user_info->'user_name'
- FROM tbl_user_jsonb
- 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)
- Heap Blocks: exact=393
- -> 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)
- Planning time: 0.104 ms
- Execution time: 8.656 ms
- (7 rows)
按照以上看出,查询表tbl_user_jsonb的user_info字段id键值在1到10000范畴内的记录走了索引而且执行时刻为8.656毫秒,从这个测试看出jsonb检索比json服从高。
从以上两个测试看出,正好验证了“json写入比jsonb快,但检索时比jsonb慢”的概念,值得一提的是假如必要通过key/value举办检索,譬喻以下:
- SELECT * FROM tbl_user_jsonb WHERE user_info @> '{"user_name": "2_francs"}';
这时执行打算为全表扫描,如下所示:
- mydb=> EXPLAIN ANALYZE SELECT * FROM tbl_user_jsonb WHERE user_info @> '{"user_name": "2_francs"}';
- QUERY PLAN
- ------------------------------------------------------------------------------------
- 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)
- Filter: (user_info @> '{"user_name": "2_francs"}'::jsonb)
- Rows Removed by Filter: 1999999
- Planning time: 0.065 ms
- Execution time: 582.232 ms
- (5 rows)
从以上看出执行时刻为582毫秒阁下,在tbl_user_jsonb字段user_info上建设gin索引,如下所示:
- mydb=> CREATE INDEX idx_tbl_user_jsonb_user_Info ON tbl_user_jsonb USING gin(user_Info);
- CREATE INDEX
索引建设后,再次执行以下,如下所示:
- 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)
- Recheck Cond: (user_info @> '{"user_name": "2_francs"}'::jsonb)
- Heap Blocks: exact=1
- -> 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)
- Index Cond: (user_info @> '{"user_name": "2_francs"}'::jsonb)
- Planning time: 0.094 ms
- Execution time: 0.114 ms
- (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 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|