SQL中表變量是否必須替代臨時(shí)表
在SQL數(shù)據(jù)庫(kù)中,必須使用表變量來(lái)代替臨時(shí)表嗎?答案取決于三個(gè)因素:插入到表中的行數(shù)、從中保存查詢的重新編譯的次數(shù)、以及查詢類型及其對(duì)性能的指數(shù)和統(tǒng)計(jì)信息的依賴性。
在某些情況下,可將一個(gè)具有臨時(shí)表的存儲(chǔ)過(guò)程拆分為多個(gè)較小的存儲(chǔ)過(guò)程,以便在較小的單元上進(jìn)行重新編譯。
通常情況下,應(yīng)盡量使用表變量,除非數(shù)據(jù)量非常大并且需要重復(fù)使用表。在這種情況下,可以在臨時(shí)表上創(chuàng)建索引以提高查詢性能。但是,各種方案可能互不相同。Microsoft 建議您做一個(gè)測(cè)試,來(lái)驗(yàn)證表變量對(duì)于特定的查詢或存儲(chǔ)過(guò)程是否比臨時(shí)表更有效。
============================
declare @temp table
(
[id] int IDENTITY(1,1),
[Name] varchar(10)
)
declare @tempId int,@tempName varchar(10)
insert into @temp values('a')
insert into @temp values('b')
insert into @temp values('c')
insert into @temp values('d')
insert into @temp values('e')
--select * from @temp
WHILE EXISTS(select [id] from @temp)
begin
SET ROWCOUNT 1
select @tempId = [id],@tempName=[Name] from @temp
SET ROWCOUNT 0
delete from @temp where [id] = @tempId
print 'Name:----'+@tempName
end
【編輯推薦】