我有一個表tblLogins
,其中有200k個用戶數據保存在其中。如何提高SQL Server中光標的性能
我需要爲另一個table
中的每個用戶插入30條記錄。我使用光標執行此任務。但是我寫的腳本花了很多時間。
僅在2小時內爲6萬用戶插入數據。
我已經看過谷歌的解決方案,但沒有找到任何有關提高性能。
下面是我寫的腳本。
DECLARE @LoginID int
DECLARE @DomainID int
DECLARE curDomain CURSOR FAST_FORWARD
FOR SELECT tbldomains_id FROM tblDomains
OPEN curDomain
FETCH NEXT FROM curDomain INTO @DomainID
WHILE @@FETCH_STATUS = 0
BEGIN
--cur2 starts
DECLARE curLogin CURSOR FAST_FORWARD
FOR SELECT tbllogins_id FROM tbllogins where tbldomains_id = @DomainID
OPEN curLogin
FETCH NEXT FROM curLogin INTO @LoginID
WHILE @@FETCH_STATUS = 0
BEGIN
--code starts
if not exists(select 1 from tblWidgetProperties where tblLogin_id = @LoginID)
begin
Insert tblWidgetProperties values(1,@LoginID,'isEnabled','True')
Insert tblWidgetProperties values(2,@LoginID,'isEnabled','True')
Insert tblWidgetProperties values(3,@LoginID,'isEnabled','True')
Insert tblWidgetProperties values(4,@LoginID,'isEnabled','True')
Insert tblWidgetProperties values(5,@LoginID,'isEnabled','True')
Insert tblWidgetProperties values(6,@LoginID,'isEnabled','True')
Insert tblWidgetProperties values(7,@LoginID,'isEnabled','True')
Insert tblWidgetProperties values(8,@LoginID,'isEnabled','True')
Insert tblWidgetProperties values(9,@LoginID,'isEnabled','True')
Insert tblWidgetProperties values(10,@LoginID,'isEnabled','True')
Insert tblWidgetProperties values(11,@LoginID,'isEnabled','True')
end
if not exists(select 1 from tblWidgetPosition where tblLogins_id = @LoginID)
begin
Insert tblWidgetPosition values(3,1.0,@LoginID)
Insert tblWidgetPosition values(4,1.01,@LoginID)
Insert tblWidgetPosition values(5,1.02,@LoginID)
Insert tblWidgetPosition values(11,1.03,@LoginID)
Insert tblWidgetPosition values(1,2.00,@LoginID)
Insert tblWidgetPosition values(7,2.01,@LoginID)
Insert tblWidgetPosition values(9,2.02,@LoginID)
Insert tblWidgetPosition values(8,2.03,@LoginID)
Insert tblWidgetPosition values(6,3.0,@LoginID)
Insert tblWidgetPosition values(2,3.01,@LoginID)
Insert tblWidgetPosition values(10,3.02,@LoginID)
end
--code ends
FETCH NEXT FROM curLogin INTO @LoginID
END
CLOSE curLogin
DEALLOCATE curLogin
--cur2 ends
FETCH NEXT FROM curDomain INTO @DomainID
END
正在從文件中讀取一個選項嗎?然後使用批量插入 –
@RadimBača我沒有任何文件的數據。 –
無法將數據序列化到服務器上的文件中? –