如何迴圈對資料表中的資料按行處理,大家很快會想到游標,不錯,游標確實能實現這個功能,學校中教科書也介紹了這個方法。但對於效率,這個方法就不是最好的了。因為游標本身有缺點:游標是存放在記憶體中,很費記憶體。游標一建立,就將相關的記錄鎖住,直到取消游標。游標提供了對特定集合中逐行掃瞄的手段,一般使用游標來逐行遍歷資料,根據取出資料條件的不同進行不同的操作。而對於多表和大表中定義的游標(大的資料集合)迴圈很容易使程式進入乙個漫長的等待甚至宕機。
而對於臨時表和表變數又是什麼情況呢?
對儲存的需求:表變數和臨時表都消耗tempdb中的儲存空間,但是進行資料更新的時候,表變數不會寫日誌,而臨時表則會寫日誌。(這一點是經過指令碼測試的,表變數並不像我們想象的那樣,只寫在記憶體而不出現在tempdb中。)
對優化的支援:表變數不支援索引和統計資料,臨時表則可以支援索引和統計資料。
對於表變數和臨時表,以後再做詳細論述,下面,先說說如何用表變數迴圈乙個表。
declare @t table(
[id] int primary key identity (1, 1),--自增字段
schid int
)insert into @t
select a.tmsc_schemeid
from tb_manytimesmscontent a
inner join tb_operation b
on a.tmsc_schemeid=b.oper_scheme_id
where datediff(dd,getdate(),a.tmsc_finish_time )>=0 and b.oper_scheme_status=2100
declare @rowcount int
select @rowcount=count([id]) from @t
set @i=1
while @i<= @rowcount
begin
select @schemeid=schid from @t where [id]=@i
--處理過程
set @i = @i + 1
end
資料庫物件 游標型變數
定義 ref cursor 型別 建立游標變數有兩個步驟 1 定義 ref cursor 型別 語法格式 type ref type name is ref cursor return return type 說明 ref type name 是游標變數中使用的型別 return type 必須是乙...
資料庫效能優化二 資料庫表優化
資料庫優化包含以下三部分,資料庫自身的優化,資料庫表優化,程式操作優化.此文為第二部分優化 設計規範化表,消除資料冗餘 資料庫正規化是確保資料庫結構合理,滿足各種查詢需要 避免資料庫操作異常的資料庫設計方式。滿足正規化要求的表,稱為規範化表,正規化產生於20世紀 70年代初,一般表設計滿足前三正規化...
資料庫效能優化二 資料庫表優化
優化 設計規範化表,消除資料冗餘 資料庫正規化是確保資料庫結構合理,滿足各種查詢需要 避免資料庫操作異常的資料庫設計方式。滿足正規化要求的表,稱為規範化表,正規化產生於20世紀 70年代初,一般表設計滿足前三正規化就可以,在這裡簡單介紹一下前三正規化 第一正規化 1nf 無重複的列 所謂第一正規化 ...