您好,登录后才能下订单哦!
这篇文章将为大家详细讲解有关POSTGRESQL比ORACLE好在哪里,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
首先介绍一下这个表的情况,避免有闲言碎语说表结构特殊, 从图中看有这几个字段,region 字段是一个BIGINT 的数字自增列,country 列式MD5 随机的计算值,year是插入数据的时的系统时间,region_class是一个根据 region 的数字范围 进行归类的列,例如1000 内的region 是1 ,其他的是2 3 以此类推,其中也有NULL , 顺便说一句自动插入数据1千万这台8G 的破机器3.6秒就完成了。
应用分组集
目的:通过region_class 来进行分组并且每组要求取最大的region 数。
select region_class,max(region) as max_in from kill_O where region < 100000 and region_class is not null group by ROLLUP (region_class); 耗时 181ms 没有任何索引
加大难度:本次查询其实没有任何意义,仅仅是为了加大查询的难度,依然没有任何索引。在多字段分组,并且进行排序,时间1009ms
select region_class,sum(region) as sum_in from kill_O where region < 100000 and region_class is not null group by ROLLUP (region_class,region) order by region_class
经过查看了执行计划,POSTGRESQL 启用了并行扫描
如果在计算中,我们在进行多个字段GROUP BY 时 希望的是举例 GROUP BY 1 2 的数据 一次性获取更多的统计数据 希望以此能获得 group by 1 2 + group by 1 + group 2 的数据,POSTGRESQL 可以做吗?YES
select region_class,sum(region) as sum_in from kill_O
where region < 100000 and region_class is not null
group by cube (region_class,region)
继续不使用索引,3892ms 完成了整体的计算
继续提高要求,目前需要 GROUP (1 2) ROLLUP+ GROUP 1 ROLLUP + GROUP 2 ROLLUP
POSTGRESQL 可以做吗,YES
select region_class,sum(region) as sum_in from kill_O
where region < 100000 and region_class is not null
GROUP BY GROUPING SETS (region_class,region)
不添加索引的情况下,2113ms 完成
如此就完事了,没有,难度还的继续。
我们在进行分组的时候,select 后面的 字段需要进行分割显示,例如
我统计 一车水果,通过水果的 好 或 坏来进行分类,但显示的时候,要对苹果,香蕉,芒果来分别显示他们的好 和坏的 总数量。
POSTGRESQL 能做这样的事情吗 YES
select region_class,
sum(region) filter(where year >'2019-04-19 10:43:33' and year < '2019-04-19 10:44:33' )
from kill_O
where region < 100000 and region_class is not null
group by (region_class); 191ms 完成
依然是没有加索引。
这没有完,继续,在统计分析中有一个概念叫中位数概念,这个概念是抛弃所有数据的50%后,在做统计,当然也可以调整,抛弃更多的数据或留下更多的数据。
具体还是看下面的语句把,都完成了。
秒级完成。
窗口函数,这个POSTGRESQL 也不能放过,看看他能做些什么
1 OVER
2 Partition by
partition by 加条件也是OK 的。并且 partition by order by 也没有问题
么最后我们还可以进行
而我们最常用的就是对我们查询的记录进行重新的排序编号
当然 POSTGRESQL 在数据库处理方面的函数也是一大把 简单列举一些
LEAD()
LAG()
可以对数据进行差别对比使用,方便出一些常用的数据对比报表使用。
first_value()
nth_value()
last_value()
row_number()
函数等等
同时还可以创建自己的聚集,方便定制化的功能。
最后,为什么在整体的操作中都没有索引的出现,主要是由于POSTGRESQL的索引分类众多,很多是ORACLE 不具备的功能。使用高级索引功能由胜之不武的嫌疑。
关于“POSTGRESQL比ORACLE好在哪里”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。