首页 > 数据库 >postgresql jsonb + 索引 + 分区 + 测试

postgresql jsonb + 索引 + 分区 + 测试

时间:2022-12-22 10:22:33浏览次数:53  
标签:01 postgresql jsonb -- js 索引 logdate tba SELECT

-- 创建表 DROP TABLE IF EXISTS tba; CREATE TABLE tba ( id serial , peaktemp int, js jsonb, logdate date not null ) PARTITION BY RANGE (logdate);   -- 设置主键 ALTER TABLE tba ADD PRIMARY KEY (id,logdate);   -- 创建索引 create index tba_idx_gin_params_jsonb on tba using gin(js jsonb_path_ops);   -- 创建分区 CREATE TABLE tba_p202201 PARTITION OF tba FOR VALUES FROM (MINVALUE) TO ('2022-02-01'); CREATE TABLE tba_p202202 PARTITION OF tba FOR VALUES FROM ('2022-02-01') TO ('2022-03-01'); CREATE TABLE tba_p202203 PARTITION OF tba FOR VALUES FROM ('2022-03-01') TO (MAXVALUE);   -- 插入测试数据 INSERT INTO tba (peaktemp,js,logdate) SELECT peaktemp, js::JSON AS js, logdate FROM ( SELECT round(100000000*random()) AS peaktemp, concat('{"sex": "男", "age": ',round(100*random()),', "city": "贡嘎", "ogran": "贡嘎中心医院", "office": "内科"}') AS js, generate_series('2022-01-01'::DATE,'2022-12-31'::DATE,'1 minute') AS logdate ) AS T;   -- 查询分区记录 SELECT TABLEOID::REGCLASS,* FROM tba;   -- 等于匹配 -- 走索引 SELECT * FROM tba WHERE js @> '{"age": 10}'; -- 不走索引 SELECT * FROM tba WHERE "js" :: json ->> 'age'::text = '10';   -- 范围匹配 SELECT * FROM tba WHERE logdate >='2022-03-01' AND cast( js :: json ->> 'age' as decimal) > 20 AND cast( js :: json ->> 'age' as decimal) < 60 LIMIT 10;   -- 模糊匹配 SELECT * FROM tba WHERE "js" :: json ->> 'age'::text like '5%' LIMIT 10;   -- 精确匹配(带分区条件) SELECT * FROM tba WHERE logdate <'2022-03-01' AND js @> '{"age": 10}';   -- 查询条数 SELECT count(0) FROM tba WHERE logdate <'2022-03-01'   -- 100W 数据带条件范围查询 1.772s -- 1000W 数据带条件范围查询 9.874s     -- 100W 数据带精确匹配查询 0.914s -- 1000W 数据带精确匹配查询 2.945s

标签:01,postgresql,jsonb,--,js,索引,logdate,tba,SELECT
From: https://www.cnblogs.com/liuxiaoji/p/16997788.html

相关文章

  • DB2创建普通索引,唯一索引
    --创建单个普通索引CREATEINDEX索引名ON模式名.表名(列名1);--创建联合索引CREATEINDEX索引名ON模式名.表名(列名1,列名2);--创建唯一索引CREATEUNIQUEINDEX......
  • 【高级数据库】第二章 第01讲 数据库索引
    【高级数据库】第二章数据库索引  在第一章我们主要介绍了数据库的基础知识,包括数据库和数据库管理系统的概念,了解了数据库管理系统是如何执行用户命令的。另外还回顾了......
  • MySQL 索引的创建、删除
    MySQL中索引的创建有三种方法,索引的删除有两种方法。一、创建索引(1)使用createindex#1.创建普通索引createindex索引名on表名(列名[(限制索引长度)]);#2.创建......
  • MySQL——InnoDB索引原理
    一、各种树形结构 1、二叉树:允许每个节点下最多有两个子节点 二叉树在数据库中不使用的原因是: 1)、树长歪了---》树的倾斜问题 查询的代价是不可控的,主要原因是树的高......
  • 索引数据结构底层(全)
    读者忠告由于本文内容篇幅较长,涵盖了大家学习上、工作上的绝大多数索引,建议大家每一小节都认真阅读并理解透彻,如有疑问可在评论区留言探讨;文章目录​​读者忠告​​​​一、......
  • 索引下推总结
    索引下推(indexconditionpushdown)简称ICP,在Mysql5.6的版本上推出,用于优化查询。在不使用ICP的情况下,在使用非主键索引(又叫普通索引或者二级索引)进行查询时,存储引擎......
  • 我说MySQL联合索引遵循最左前缀匹配原则,面试官让我回去等通知
    携手创作,共同成长!这是我参与「掘金日新计划·8月更文挑战」的第6天,点击查看活动详情面试官:我看你的简历上写着精通MySQL,问你个简单的问题,MySQL联合索引有什么特性?心......
  • Powerdesigner反向Postgresql14常见问题
    一、数据库连接powerdesigner需要安装32位jdk,同时到Tool->GeneralOptions中设置32位jdk的路径  配置数据库连接:选择菜单Database->UpdateModelFromDataba......
  • 技术分享 | InnoDB 排序索引的构建
    作者:SatyaBodapati翻译:管长龙从MySQL5.7开始,开发人员改变了InnoDB构建二级索引的方式,采用自下而上的方法,而不是早期版本中自上而下的方法了。在这篇文章中,我们将通过......
  • 技术分享 | 为什么 SELECT 查询选择全表扫描,而不走索引?
    作者:Charizard爱可生服务团队成员,主要负责公司数据库运维产品问题诊断;努力在数据库和IT领域里摸爬滚打中。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意......