**游標.
這個東西很難說,存在必有其存在的道理.不能一棍子說它怎麼不好,效率多差,它還是有適合用的地方,不然微軟也不會把它做出來讓大家用.這
本身就說明他是個不可捨去的東西..根據書上,我說說游標的使用
1.游標為什麼這麼受'棄用'
a.游標和關係模式的主要前提是衝突的。關係模式是乙個集合的邏輯,它注重的你在執行**後獲取什麼』。
但是游標是一種過程的邏輯,它注重的是'如何處理資料'.
b.這個游標逐行操作產生的行操作開銷是比較巨大的,一般他的速度也比集合思想處理的慢.(但是有些情況下的資料分布也可能決定游標要快)
c.這個游標要強制我們的優化器執行固定的計畫.不是像集合的解決方法那樣選乙個比較優秀的執行計畫.
舉個例子說明游標的開銷: 我們就做掃瞄表的操作.實驗成 先把ssms的執行後放棄結果選項後再執行**。
這樣可以保證遮蔽生成輸出浪費的時間,保證我們的2個操作時間差就差在效能上,體現游標的開銷
----我這機器第一次是7秒,第二次是1秒
----我的機器上一次22秒,一次17秒.
------我們分析結果 只考慮熱快取,第二次沒寫入記憶體 這樣就不涉及物理的i/o操作,你自己也看到了 我這赤裸裸的17倍速度.(每個人機器上不一樣)
---但是可以肯定 集合的比游標要快很多倍.
ps;這裡還有個三不像的解法.看起來像游標,其實基於集合.(一定要選中放棄執行結果選項)
---這個方法在我機器上第一次執行了20秒,第二次是14秒(- - || 我很鬱悶 ,書上說要比游標還慢好幾倍..可是測試來測試就是差不多嘛)
d.我們這個游標的**還不是很長,這還看不出遊標的**還需要維護的成本,但是往往游標非常長的,那是需要成本的.
2.游標也有受'親賴'的時候
當問題本身就是基於順序的時候,游標是很有可能比基於集合的**更加快(但不是一定快)
a.自定義的一些聚合
--首先插入資料
--方法1:游標
--方法2:pivoting 聚合
------------結果----------------
----上面三種方法,用游標雖然不是很快,但是它簡單 通用 ,第二種方法需要組中的元素比較少,第三種方法奇快無比,但是它只適合用來算正數
---所以這裡使用游標還是不錯的.
b.連續聚合(累計組內從第乙個元素到當前元素)
--插入資料
--方法1:游標
--方法2:集合的思想
---基於游標的解決方案呢只掃瞄表一次.方案效能成線性變化.基於集合的卻是基於n的平方變化.
--一般如果有g組,一組裡有n行,那麼你將掃瞄g*(n+n*n)/2行.這裡假設列上有索引的情況下.如果你的組足夠小,那麼使用基於集合的方案
--要比游標快很多.隨著組的增大,效能集合方案效能將以n*n的速度下降.而基於游標的解決方法效能是一條直線.
--從書上乙個實驗圖看出結果:隨著行數的增加,基於游標的方案效能的優勢將越來越明顯.因為乙個是n*n的拋物線,乙個是直線.
ps:當sql支援 sum() over (partition by xx order by ***)的時候 集合的這個方案可能比游標更加快
c.還有一些匹配方面的問題 游標也比較快.因為比較難,自己也沒理解透徹.
說實話 我也不喜歡游標 但是它確實存在著 並且有它一定的用武之地目前.
SAP BW個人學習筆記
sap bw個人學習筆記 難免有錯,持續更新,切勿對號入座。一 kpi 1 kpi是線性遞增的 2 kpi關鍵指標 一般情況下,2個模組,就有40個kpi,3個模組,有60多個kpi 二 增強 1 只有不符合要求時,才使用增強,還要使用標準字段。三 財務資料源 財務資料源是用的後像,也即是餘像,只能...
ajax個人學習筆記
1.function createxhr else if typeof activexobject undefined catch e else 2.ie瀏覽器第一次向伺服器端請求,獲取最新資料,其後預設獲取的是快取資料,而不是最新的資料,可以使用js中的隨機字串處理。3.ajax非同步 true ...
個人學習筆記 0802
header1 一級標題 h是英文header標題的縮寫,標題無處不在,它的應用範圍十分廣泛 結構 寫作文 ppt等。h1是主標題,h2是副標題,h3 h4 h5 h6依次遞減字型的大小。p是英文paragraph段落的縮寫,常用於建立乙個段落 用於注釋 lorem ipsum text 一般用於佔...