我有sql性能问题.由于突然的原因,以下查询非常慢:
我有两个列表,其中包含某个表的Id.如果ID已经存在于第二个列表中,则需要从第一个列表中删除所有记录:
DECLARE @IdList1 TABLE(Id INT) DECLARE @IdList2 TABLE(Id INT) -- Approach 1 DELETE list1 FROM @IdList1 list1 INNER JOIN @IdList2 list2 ON list1.Id = list2.Id -- Approach 2 DELETE FROM @IdList1 WHERE Id IN (SELECT Id FROM @IdList2)
两个列表可能包含超过10.000条记录.在这种情况下,两个查询都需要超过20秒才能执行.
执行计划也显示了我不明白的东西.也许这就解释了为什么这么慢:
我用10.000个顺序整数填充了两个列表,所以这两个列表都以1-10.000为起始点.
您可以看到@ IdList2的两个查询显示实际行数为50.005.000! @ IdList1是正确的(实际行数为10.000)