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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

1万条数据大概占多大空间_「数据分析」Sqlserver的窗口函数的精彩应用之数据差距与数据岛...

發布時間:2024/9/30 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1万条数据大概占多大空间_「数据分析」Sqlserver的窗口函数的精彩应用之数据差距与数据岛... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇介紹過數據差距與數據島的背景,這里不再贅述,請翻閱上一文。此篇在Sqlserver上給大家演示1000萬條記錄的計算性能。

測試電腦軟硬件說明

一般般的筆記本電腦,2017年7月,價格:4500+。

電腦配置

數據構造

1000萬行數據,由10萬個用戶+每用戶100條記錄組成,同樣使用書中所提及的構造序列的表值函數輕松構造完成。

同樣使用窗口函數完成的表值函數

生成1000萬條數據記錄

數據源結構

使用循環和隨機函數,實現刪除10萬條數據,因測試時先建了索引再刪除數據,慢得一塌糊涂,最終中途中止了,沒有實際刪除這么多數據。

隨機刪除10萬條記錄,用于實現數據差距和數據島效果

關系型數據庫,性能優化的核心是適當的索引,此次肯定要加上索引才能客觀地表現出該有的合理效果。

增加聚集索引

算法代碼演示

數據差距范圍

此部分計算的邏輯是將每個用戶分組下本來連續的序號中,缺失了某些記錄,這些缺失的部分對應的區間范圍,若缺失的為連續的,返回連續的區間,若缺失為單個記錄,返回首尾相同的序號。

數據差距的SQL代碼及結果

原理:關鍵思路是使用LEAD函數,使用“用戶”列作分區,按序號的升序排列,取當前用戶組的當前行序號為cur列,其下一行內容作為nxt列,最終構造結構表是,將當前行的cur列值+1構造出差距的首范圍,當前行的nxt列值-1作為結束范圍。

而最終的結果只會取nxt和cur之差大于1的記錄,即開始有缺失產生差距的行記錄。

總記錄1000萬條,10萬個用戶,分組計算后,返回數據產距90899條記錄,用時27秒

分解下步驟,將CTE虛擬表C給大家看下效果,可以看到97和100之間是缺失了98、99兩值,最終在97序號上,cur為97、nxt為100,此行記錄是我們后面where條件要篩選出來的記錄行(模擬刪除數據過程中,盡量刪除連續的兩條記錄,讓差距結果更清晰)。

將cur+1,nxt-1后,就拿到98-99這樣的差距區間。

分步驟演示

數據島范圍

這個就是一般來說連續記錄的區間,如現實場景中的用戶連續打卡天區間。10萬個用戶測試,100天打卡天數,足夠滿足一般互聯網中等規模的活動場景使用。

數據島范圍的SQL代碼及結果

原理:使用排名窗口函數,對用戶進行分組計算。若有數據缺失時,排名的序號和正常序號之差會有跳躍性的差距(正常無缺失時序號和排名是相同,且差異為0)。

下一步對排名產生的相同的數值進行分組匯總,連同用戶字段,最終可統計出某用戶在某個差異值grp下的連續區間。

分解步驟后可知,在用戶1中,58后缺失了59、60兩個值,最終在61的排名與序號差grp為2,直到下一次有缺失時,此2的值再更新為下一個缺失的值區間長度2+2=4。

分步驟演示

下一個缺失值為98和99兩值

結語

Sqlserver的窗口函數,非常多的應用場景,對傳統的SQL的查詢進行了極大的簡化,在PowerBI的DAX查詢語言中,暫時還缺少其在集合的基礎上進行窗口的處理,致使同樣都是對數據集合進行運算,但因為缺失窗口函數特性支持,性能上仍然和SQL中的窗口函數處理有非常大的差距。

想必有人好奇地問,這些內容在其他數據庫中是否同樣可以?窗口函數在其他關系型數據庫中是否也一樣支持?

據筆者知識范圍所知,MySQL和Sqlite是沒有的,Oracle是有的,并且比Sqlserver更強大(為何不推薦,因為筆者是微軟系的信徒唄,Oracle人家是法務團隊強大,你懂得)。

總結

以上是生活随笔為你收集整理的1万条数据大概占多大空间_「数据分析」Sqlserver的窗口函数的精彩应用之数据差距与数据岛...的全部內容,希望文章能夠幫你解決所遇到的問題。

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