日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Atitit  数据存储的分组聚合 groupby的实现attilax总结

發(fā)布時間:2023/11/29 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。