萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> SQLServer 優化SQL語句 in 和not in的替代方案

SQLServer 優化SQL語句 in 和not in的替代方案

not in


SET STATISTICS TIME ON
GO
--備份數據
insert into bakInfo(id,PName,remark,impdate,ups教程tate)
select id,PName,remark,impdate,upstate from dbo.Info
where id not in(select id from dbo.bakInfo)
GO
SET STATISTICS TIME OFF


SQL Server 分析和編譯時間:
CPU 時間 = 0 毫秒,占用時間 = 3 毫秒。
SQL Server 執行時間:
CPU 時間 = 453 毫秒,占用時間 = 43045 毫秒。
(100000 行受影響)
SQL Server 分析和編譯時間:
CPU 時間 = 0 毫秒,占用時間 = 1 毫秒。
--更改當前表狀態
update Info set upstate=1 where id in(select id from dbo.bakInfo)


create procedure AddData
as
declare @id int
set @id=0
while(@id<100000)
begin
insert into dbo.Info(id,PName,remark,impdate,upstate)
values(@id,convert(varchar,@id)+'0','abc',getdate(),0)
set @id=@id+1
end
exec AddData


SQL Server 分析和編譯時間:
CPU 時間 = 62 毫秒,占用時間 = 79 毫秒。
SQL Server 執行時間:
CPU 時間 = 188 毫秒,占用時間 = 318 毫秒。
(100000 行受影響)
SQL Server 分析和編譯時間:
CPU 時間 = 0 毫秒,占用時間 = 1 毫秒。
--刪除當前表數據
delete from Info where upstate=1 and id in(select id from dbo.bakInfo)


SET STATISTICS TIME ON
GO
--備份數據
insert into bakInfo(id,PName,remark,impdate,upstate)
select id,PName,remark,impdate,upstate from
(SELECT Info.id,Info.PName, Info.remark, Info.impdate,Info.upstate, bakInfo.id AS bakID
FROM Info left JOIN
bakInfo ON Info.id = bakInfo.id ) as t
where t.bakID is null and t.upstate=0
GO
SET STATISTICS TIME OFF;


SQL Server 分析和編譯時間:
CPU 時間 = 247 毫秒,占用時間 = 247 毫秒。
SQL Server 執行時間:
CPU 時間 = 406 毫秒,占用時間 = 475 毫秒。
(100000 行受影響)
SQL Server 分析和編譯時間:
CPU 時間 = 0 毫秒,占用時間 = 1 毫秒。
--更改當前表狀態
update Info set upstate=1
FROM Info INNER JOIN
bakInfo ON Info.id = bakInfo.id

copyright © 萬盛學電腦網 all rights reserved