SQL Server游標的使用/關閉/釋放/優化小結SEO優化
導讀:2SEO優化游標打破了這一查詢的思考是面向集合的規則,游標使得我們思考方式變為逐行進行,接下來為大家介紹下游標的使用網站建設高端網站建設。
游標是邪惡的!
在關系數據庫中,我們對于查詢的思考是面向集合的。而游標打破了這一規則,游標使得我們思考方式變為逐行進行.對于類C的開發人員來著,這樣的思考方式會更加舒服。
正常面向集合的思維方式是:
這也是為什么游標是邪惡的,它會使開發人員變懶,懶得去想用面向集合的查詢方式實現某些功能.
同樣的,在性能上,游標會吃更多的內存,減少可用的并發,占用寬帶,鎖網站建設公司定資源,當然還有更多的代碼量……
從游標對數據庫的讀取方式來說,不難看出游標為什么占用更多的資源,打個比方:
T-SQL中的游標定義在MSDN中如下:
DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ] [ FORWARD_ONLY | SCROLL ] [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ] [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] [ TYPE_WARNING ] FOR select_statement [ FOR UPDATE [ OF column_name [ ,...n ] ] ][;]看起來很讓人頭痛是吧.下面仔細講一下如何定義游標:
游標分為游標類型和游標變量,對于游標變量來說,遵循T-SQL變量的定義方法(啥,不知道T-SQL變量定義的規則?參考我前面的博文).游標變量支持兩種方式賦值,定義時賦值和先定義后賦值,定義游標變量像定義其他局部變量一樣,在游標前加”@”,注意,如果定義全局的游標,只支持定義時直接賦值,并且不能在游標名稱前面加“@”,兩種定義方式如下:
如果不指定游標作用域,默認作用域為GLOBAL
FORWARD_ONLY 和 SCROLL 二選一
FORWARD_ONLY意味著游標只能從數據集開始向數據集結束的方向讀取,FETCH NEXT是唯一的選項,而SCROLL支持游標在定義的數據集中向任何方向,或任何位置移動,如下圖:
這四個關鍵字是游標所在數據集所反應的表內數據和游標讀取出的數據的關系
STATIC意味著,當游標被建立時,將會創建FOR后面的SELECT語句所包含數據集的副本存入tempdb數據庫中,任何對于底層表內數據的更改不會影響到游標的內容.
DYNAMIC是和STATIC完全相反的選項,當底層數據庫更改時,游標的內容也隨之得到反映,在下一次fetch中,數據內容會隨之改變
KEYSET可以理解為介于STATIC和DYNAMIC的折中方案。將游標所在結果集的唯一能確定每一行的主鍵存入tempdb,當結果集中任何行改變或者刪除時,@@FETCH_STATUS會為-2,KEYSET無法探測新加入的數據
FAST_FORWARD可以理解成FORWARD_ONLY的優化版本.FORWARD_ONLY執行的是靜態計劃,而FAST_FORWARD是根據情況進行選擇采用動態計劃還是靜態計劃,大多數情況下FAST_FORWARD要比FORWARD_ONLY性能略好.
聲明: 本文由我的SEOUC技術文章主頁發布于:2023-05-24 ,文章SQL Server游標的使用/關閉/釋放/優化小結SEO優化主要講述游標,小結,SQL網站建設源碼以及服務器配置搭建相關技術文章。轉載請保留鏈接: http://www.bifwcx.com/article/seo_6217.html