對於彙總型別的分析報表,在報表生成時往往需要進行分組聚集運算,如果在資料庫中先進行一次分組聚集,能夠大大減少取到報表伺服器的記錄數,加快取數和報表運算的速度。
看如下報表:
這是乙個典型的交叉分組報表,其sql有兩種寫法:
第一種:select 產品,客戶,銷量 from 購買記錄表
第二種:select產品,客戶,sum(銷量) from 購買記錄表 group by 產品,客戶
而報表的做法都一樣,如下圖所示:
分析:採用第一種做法,不僅僅取到報表伺服器上記錄數多了,取數速度慢,而且在報表端對購買記錄表進行分組運算的時候速度也慢了;
採用第二種做法,資料庫雖然要進行分組運算,但是資料庫中有索引,運算速度快,且取到報表伺服器端的記錄數大大減少,取數速度大大加快,因此在報表端進行分組運算的時候只要對很少的記錄數進行,報表的運算速度大大加快了。
總結:第二種做法的效能遠遠優於第一種
在Spark中盡量少使用GroupByKey函式
為什麼建議盡量在spark 中少用groupbykey,讓我們看一下使用兩種不同的方式去計算單詞的個數,第一種方式使用reducebykey 另外一種方式使用groupbykey,如下 01 user 過往記憶 02 date 2015 05 18 03 time 下午22 26 06 過往記憶部落...
SQL中Group分組獲取Top N 方法實現
有產品表,包含id,name,city,addtime四個字段,因報表需要按城市分組,統計每個城市的最新10個產品,便向該表中插入了100萬資料,做了如下系列測試 create table dbo products id int identity 1,1 not null name nvarchar...
盡量避免在SQL語句的WHERE子句中使用函式
start 在sql語句的where子句中應該盡量避免在字段上使用函式,因為這樣做會使該字段上的索引失效,影響sql語句的效能。即使該字段上沒有索引,也應該避免在字段上使用函式。考慮下面的情況 現在要求你把2009.9.24註冊的使用者都查出來,怎麼辦?可能有人會這麼寫 不過很遺憾,這個語句是錯誤的...