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秒钟。
有没有一种方法可以提高像这样的查询的性能? 为什么需要时间为参数赋值? 任何评论......
答案 0 :(得分:2)
这不是一个变量参数。
SQL Server不会嗅探变量的值,因此它在编译时不知道它将包含的值是28
在查询结尾添加OPTION (RECOMPILE)
,以便在分配变量值后重新编译语句,并生成更合适的执行计划。