個人學習筆記13之 游標薄見

2021-05-10 09:02:16 字數 2138 閱讀 5820

**游標.

這個東西很難說,存在必有其存在的道理.不能一棍子說它怎麼不好,效率多差,它還是有適合用的地方,不然微軟也不會把它做出來讓大家用.這

本身就說明他是個不可捨去的東西..根據書上,我說說游標的使用

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 一般用於佔...