存储过程SQL优化
我正在运行一个查询,它需要很长时间。以下是我的示例代码:存储过程SQL优化,sql,sql-server-2008,Sql,Sql Server 2008,我正在运行一个查询,它需要很长时间。以下是我的示例代码: SELECT @AppleCount=COUNT(*) FROM ( SELECT * FROM @iDToStoreMapping sm WHERE StoreFront=73 AND sm.CategoryCountryCategoryTYpeMappingID NOT IN (SELECT * FROM @FinishedDls) ) rows @AppleCount应该是存在的所有categoryCountry
SELECT @AppleCount=COUNT(*)
FROM (
SELECT * FROM @iDToStoreMapping sm
WHERE StoreFront=73
AND sm.CategoryCountryCategoryTYpeMappingID NOT IN
(SELECT * FROM @FinishedDls)
) rows
@AppleCount应该是存在的所有categoryCountryCategoryTypeMappingId,如果应用程序完成下载并在其中写入该id,@Finishedls具有该id,因此此查询应该获得尚未下载的id的计数。大约有5万个ID。我必须运行这个查询3次,但每次都需要几分钟。有什么我做错了吗?有时使用显式的
连接而不是不在
会产生更好的性能:
SELECT @AppleCount = COUNT(*)
FROM @iDToStoreMapping sm left outer join
@FinishedDls fd
on sm.CategoryCountryCategoryTYpeMappingID = fd.id
WHERE StoreFront = 73 and
fd.id is null;
有时使用显式的join
而不是notin
可以获得更好的性能:
SELECT @AppleCount = COUNT(*)
FROM @iDToStoreMapping sm left outer join
@FinishedDls fd
on sm.CategoryCountryCategoryTYpeMappingID = fd.id
WHERE StoreFront = 73 and
fd.id is null;
有时使用显式的join
而不是notin
可以获得更好的性能:
SELECT @AppleCount = COUNT(*)
FROM @iDToStoreMapping sm left outer join
@FinishedDls fd
on sm.CategoryCountryCategoryTYpeMappingID = fd.id
WHERE StoreFront = 73 and
fd.id is null;
有时使用显式的join
而不是notin
可以获得更好的性能:
SELECT @AppleCount = COUNT(*)
FROM @iDToStoreMapping sm left outer join
@FinishedDls fd
on sm.CategoryCountryCategoryTYpeMappingID = fd.id
WHERE StoreFront = 73 and
fd.id is null;
我没有在我的表变量上使用主键,这就是导致糟糕性能的原因。对不起大家 我没有在表变量上使用主键,这就是导致糟糕性能的原因。对不起大家 我没有在表变量上使用主键,这就是导致糟糕性能的原因。对不起大家 我没有在表变量上使用主键,这就是导致糟糕性能的原因。对不起大家 回答本人+1表示努力和有用信息回答本人+1表示努力和有用信息回答本人+1表示努力和有用信息回答本人+1表示努力和有用信息回答本人+1表示努力和有用信息