我有一个奇怪的场景,当我执行一个存储的查询时需要30分钟以上。如果我获取存储过程的主体并将参数转换为变量,则需要1:30。
我在ssms里查这个。
存储过程使用一些连接执行选择。像这样的
CREATE OR ALTER PROCEDURE [report].[MyReport]
@DataPackageId INT,
@DefaultAsOf DATETIME2(7),
@DefaultDealAsOf DATETIME2(7)
AS
SELECT
*
FROM
reporthelper.FuncA(@DataPackageId,@DefaultAsOf, @DefaultDealAsOf) FuncA
LEFT JOIN reporthelper.FuncB(@DataPackageId,@DefaultAsOf, @DefaultDealAsOf) FuncB
ON FuncA.Field1 = FuncB.Field2
AND FuncA.Field1 = FuncB.Field2
--More Joins
GO
如果执行的sql基本相同,为什么这两个场景的执行时间会有这么大的差异?
2条答案
按热度按时间pzfprimi1#
几乎可以肯定是“参数嗅探”,我通常是这样解决的:
yc0p9oo02#
最后我使用了larnu在评论中发布的建议:参数嗅探