Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有参数的SQL Server性能问题_Sql_Sql Server 2005 - Fatal编程技术网

带有参数的SQL Server性能问题

带有参数的SQL Server性能问题,sql,sql-server-2005,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_v

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
declare@siteId int,
@总计数整数
选择@totalCount=COUNT(不同的专业产品标识)
从产品到专业
在pro.product\u id=proCat.product\u id上以proCat的形式将产品\u内部连接到\u类别
内部连接产品到供应商在pro.product\u id=proVen.product\u id上经过验证
其中pro.site_id=@siteId
和pro.product_类型3
打印@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
@totalCount int
选择@totalCount=COUNT(不同的专业产品标识)
从产品到专业
在pro.product\u id=proCat.product\u id上以proCat的形式将产品\u内部连接到\u类别
内部连接产品到供应商在pro.product\u id=proVen.product\u id上经过验证
其中pro.site_id=28
和pro.product_类型3
打印@totalCount
再次执行查询,只需2秒钟

有没有一种方法可以提高这样一个查询的性能? 为什么给参数赋值需要时间?
任何注释……

这不是一个参数,而是一个变量

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


选项(重新编译)
添加到查询的末尾,使其在变量赋值后重新编译语句,并生成更合适的执行计划。

您的表上有索引吗?@Tharaka,在运行硬编码版本后,是否立即尝试重新运行查询的参数化版本?如果是这样,需要多长时间?我已经尝试了选项(重新编译)。它适用于子存储过程,但不适用于嵌套存储过程。还有其他解决方案吗?您可以将其添加到查询的末尾
。。。其中pro.site\u id=@siteId和pro.product\u类型3选项(重新编译)