您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關POSTGRESQL比ORACLE好在哪里,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
首先介紹一下這個表的情況,避免有閑言碎語說表結構特殊, 從圖中看有這幾個字段,region 字段是一個BIGINT 的數(shù)字自增列,country 列式MD5 隨機的計算值,year是插入數(shù)據(jù)的時的系統(tǒng)時間,region_class是一個根據(jù) region 的數(shù)字范圍 進行歸類的列,例如1000 內的region 是1 ,其他的是2 3 以此類推,其中也有NULL , 順便說一句自動插入數(shù)據(jù)1千萬這臺8G 的破機器3.6秒就完成了。
應用分組集
目的:通過region_class 來進行分組并且每組要求取最大的region 數(shù)。
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
經(jīng)過查看了執(zhí)行計劃,POSTGRESQL 啟用了并行掃描
如果在計算中,我們在進行多個字段GROUP BY 時 希望的是舉例 GROUP BY 1 2 的數(shù)據(jù) 一次性獲取更多的統(tǒng)計數(shù)據(jù) 希望以此能獲得 group by 1 2 + group by 1 + group 2 的數(shù)據(jù),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)
繼續(xù)不使用索引,3892ms 完成了整體的計算
繼續(xù)提高要求,目前需要 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 完成
如此就完事了,沒有,難度還的繼續(xù)。
我們在進行分組的時候,select 后面的 字段需要進行分割顯示,例如
我統(tǒng)計 一車水果,通過水果的 好 或 壞來進行分類,但顯示的時候,要對蘋果,香蕉,芒果來分別顯示他們的好 和壞的 總數(shù)量。
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 完成
依然是沒有加索引。
這沒有完,繼續(xù),在統(tǒng)計分析中有一個概念叫中位數(shù)概念,這個概念是拋棄所有數(shù)據(jù)的50%后,在做統(tǒng)計,當然也可以調整,拋棄更多的數(shù)據(jù)或留下更多的數(shù)據(jù)。
具體還是看下面的語句把,都完成了。
秒級完成。
窗口函數(shù),這個POSTGRESQL 也不能放過,看看他能做些什么
1 OVER
2 Partition by
partition by 加條件也是OK 的。并且 partition by order by 也沒有問題
么最后我們還可以進行
而我們最常用的就是對我們查詢的記錄進行重新的排序編號
當然 POSTGRESQL 在數(shù)據(jù)庫處理方面的函數(shù)也是一大把 簡單列舉一些
LEAD()
LAG()
可以對數(shù)據(jù)進行差別對比使用,方便出一些常用的數(shù)據(jù)對比報表使用。
first_value()
nth_value()
last_value()
row_number()
函數(shù)等等
同時還可以創(chuàng)建自己的聚集,方便定制化的功能。
最后,為什么在整體的操作中都沒有索引的出現(xiàn),主要是由于POSTGRESQL的索引分類眾多,很多是ORACLE 不具備的功能。使用高級索引功能由勝之不武的嫌疑。
關于“POSTGRESQL比ORACLE好在哪里”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。