2014-02-13 195 views
0

我正在运行一个查询,并花了很长时间。下面是我的示例代码:存储过程SQL优化

SELECT @AppleCount=COUNT(*) 
FROM (
SELECT * FROM @iDToStoreMapping sm 
WHERE StoreFront=73 
AND sm.CategoryCountryCategoryTYpeMappingID NOT IN 
(SELECT * FROM @FinishedDls) 
) rows 

@AppleCount应该是所有categoryCountryCategoryTypeMappingId的存在,并@FinishedDls有一个ID,如果一个应用程序完成了它的下载和写道,ID在那里,所以这个查询应该接受尚未下载的那些ID的数量。大约有5万个ID。我必须运行这个查询3次,但每个需要几分钟。有什么我做错了吗?

回答

3

有时使用join代替not in一个明确的结果更好的性能:

SELECT @AppleCount = COUNT(*) 
FROM @iDToStoreMapping sm left outer join 
    @FinishedDls fd 
    on sm.CategoryCountryCategoryTYpeMappingID = fd.id 
WHERE StoreFront = 73 and 
     fd.id is null; 
+0

回答我的+1自己的努力和有用的信息 –

0

我没有使用我的表变量主键,这是什么原因造成的可怕表现。对不起大家。