Atitit 数据存储的分组聚合 groupby的实现attilax总结
?
?
?
Atitit ?數據存儲的分組聚合 groupby的實現attilax總結
?
1. 聚合操作1
1.1. a、標量聚合?流聚合1
1.2. b、哈希聚合2
1.3. 所有的最優(yōu)計劃的選擇都是基于現有統(tǒng)計信息來評估3
1.4. 參考資料3
?
1.?聚合操作
聚合也是我們在寫T-SQL語句的時候經常遇到的,我們來分析一下一些常用的聚合操作運算符的特性和可優(yōu)化項。
1.1.?a、標量聚合?流聚合
標量聚合是一種常用的數據聚合方式,比如我們寫的語句中利用的以下聚合函數:MAX()、MIN()、AVG()、COUNT()、SUM()
以上的這些數據結果項的輸出基本都是通過流聚合的方式產生,并且這個運算符也被稱為:標量聚合
?
其實,流聚合這種算法最常用的方式是分組(GROUP BY)計算,上面的標量計算也是利用這個特性,只不過把整體形成了一個大組進行聚合。
?
?
我么通過如下代碼理解
?
clear the current aggredate results
clear the current group by columnsfor?each input row
begin
????if?the input row does not match the current group by columns
????begin
???????output the current aggreagate results(if?any)
???????clear the current aggreagate results
???????set?the current group by columns to the input row
????end
???update the aggregate results with the input row
end
?
流聚合運算符其實過程很簡單,維護一個聚合組和聚合值,依次掃描表中的數據,如果能不匹配聚合組則忽略,如果匹配,則加入到聚合組中并且更新聚合值結果項。
舉個例子
SELECT ShipAddress,ShipCity,COUNT(*)
FROM Orders
GROUP BY ShipAddress,ShipCity
所以這里我們已經總結出對于流聚合的一種優(yōu)化方式:盡量避免排序產生,而要避免排序就需要將分組(Group by)字段在索引覆蓋范圍內。
?
?
1.2.?b、哈希聚合
上述的流聚合的方式需要提前排序,我們知道排序是一個非常大的消耗過程,所以不適合大表的分組聚合操作,為了解決這個問題,又引入了另外一種聚合運算:哈希聚合
所謂的哈希聚合內部的方法和本篇前面提到的哈希連接機制一樣。
哈希聚合不需要排序和過大的內存消耗,并且很容易并行執(zhí)行計劃,利用多CPU同步進行,但是有一個缺點就是:這一過程是阻塞的,也就說哈希聚合不會產生任何結果直到完整的輸入。
所以在大數據表中采用哈希聚合是一個很好的應用場景。
?
?
我們知道排序是很耗資源的一件事情,但是利用哈希匹配只需要將不同的列值進行提取就可以,所以相比性能而言,無疑哈希匹配算法在這里是略勝一籌的算法。
?
?
1.3.?所有的最優(yōu)計劃的選擇都是基于現有統(tǒng)計信息來評估
而上面關于這兩列內容分布類型SQL Server是怎樣知道的?這就是SQL Server的強大的統(tǒng)計信息在支撐了。
在SQL Server中并不是固定的語句就會形成特定的計劃,并且生成的特定計劃也不是總是最優(yōu)的,這和數據庫現有數據表中的內容分布、數據量、數據類型等諸多因素有關,而記錄這些詳細信息的就是統(tǒng)計信息。
所有的最優(yōu)計劃的選擇都是基于現有統(tǒng)計信息來評估,如果我們的統(tǒng)計信息未及時更新,那么所評估出來最優(yōu)的執(zhí)行計劃將不是最好的,有時候反而是最爛的。?
?
?
1.4.?參考資料
?
SQL Server調優(yōu)系列基礎篇(常用運算符總結——三種物理連接方式剖析) - 指尖流淌 - 博客園.html
?
作者::?綽號:老哇的爪子claw?of Eagle?偶像破壞者Iconoclast?image-smasher
捕鳥王"Bird?Catcher?王中之王King of Kings 虔誠者Pious?宗教信仰捍衛(wèi)者?Defender?of?the?Faith.?卡拉卡拉紅斗篷?Caracalla?red cloak
簡稱::?Emir Attilax?Akbar?埃米爾?阿提拉克斯?阿克巴
全名::Emir Attilax?Akbar?bin Mahmud?bin ?attila bin Solomon?Al?Rapanui?
埃米爾 阿提拉克斯?阿克巴?本 馬哈茂德?本?阿提拉 本 所羅門??阿爾?拉帕努伊???
常用名:艾提拉(艾龍),???EMAIL:1466519819@qq.com
轉載請注明來源:attilax的專欄 ??http://www.cnblogs.com/attilax/
--Atiend
?
?
?
轉載于:https://www.cnblogs.com/attilax/p/6142980.html
總結
以上是生活随笔為你收集整理的Atitit 数据存储的分组聚合 groupby的实现attilax总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到喂鸡喂鸭是什么意思
- 下一篇: 图测试题部分总结.ing