带参数的SQL Server性能问题

时间:2011-12-07 13:23:03

标签: sql sql-server-2005

SQL查询存在性能问题。 这是我的查询

declare @siteId int,    
@totalCount int

 SELECT @totalCount = COUNT(DISTINCT pro.product_id)
    FROM product AS pro 
    INNER JOIN product_to_category AS proCat ON pro.product_id = proCat.product_id
    INNER JOIN product_to_vendor proVen ON  pro.product_id = proVen.product_id
WHERE pro.site_id = @siteId 
    AND pro.product_type <> 3
print @totalCount

执行需要6秒..

当我删除参数时如下

@totalCount int

SELECT @totalCount = COUNT(DISTINCT pro.product_id)
FROM product AS pro 
INNER JOIN product_to_category AS proCat ON pro.product_id = proCat.product_id
INNER JOIN product_to_vendor proVen ON  pro.product_id = proVen.product_id
WHERE pro.site_id = 28
AND pro.product_type <> 3
print @totalCount

再次执行查询,只需2秒钟。

有没有一种方法可以提高像这样的查询的性能? 为什么需要时间为参数赋值? 任何评论......

1 个答案:

答案 0 :(得分:2)

这不是一个变量参数。

SQL Server不会嗅探变量的值,因此它在编译时不知道它将包含的值是28

在查询结尾添加OPTION (RECOMPILE),以便在分配变量值后重新编译语句,并生成更合适的执行计划。