Sql server 在sql server上运行sql时如何优化sql
如何优化下面相同的sql代码:Sql server 在sql server上运行sql时如何优化sql,sql-server,Sql Server,如何优化下面相同的sql代码: Declare @i int=0; while @i<10000 Begin Set @i=@i+1; set @ID=(Select top(1) ID from Products.dbo.TempID where IsUpdate=0); Delete from Attributes where ID=@ID; Delete from Products where ID=@ID Delete from Attributes_Archive where I
Declare @i int=0;
while @i<10000
Begin
Set @i=@i+1;
set @ID=(Select top(1) ID from Products.dbo.TempID where IsUpdate=0);
Delete from Attributes where ID=@ID;
Delete from Products where ID=@ID
Delete from Attributes_Archive where ID=@ID
update TempID set IsUpdate=1 where ID=@ID
end
使用基于集合的查询而不是循环。在这种情况下,整个查询只执行一次,而不是执行10000次。比如:
DELETE FROM Attributes
WHERE ID IN ( SELECT ID
FROM Products.dbo.TempID
WHERE IsUpdate = 0
AND ID < 10000 );
DELETE FROM Products
WHERE ID IN ( SELECT ID
FROM Products.dbo.TempID
WHERE IsUpdate = 0
AND ID < 10000 );
DELETE FROM Attributes_Archive
WHERE ID IN ( SELECT ID
FROM Products.dbo.TempID
WHERE IsUpdate = 0
AND ID < 10000 );
UPDATE TempID
SET IsUpdate = 1
WHERE ID IN ( SELECT ID
FROM Products.dbo.TempID
WHERE IsUpdate = 0
AND ID < 10000 );
或者,您可以先获取要删除/更新的ID,然后使用此列表,类似于:
SELECT ID
INTO #ids
FROM Products.dbo.TempID
WHERE IsUpdate = 0
AND id < 10000;
DELETE FROM Attributes
WHERE ID IN ( SELECT ID
FROM #ids );
...
告诉我们你到目前为止试过什么。同样的问题,我也试过了。但在执行过程中需要时间。