我有一个存储过程 (SP),其中传入了一个表值参数 (TVP)。SP 中的相同代码执行速度比 SP 外部慢很多。
我查看了执行计划,它们非常不同。
起初这似乎是参数嗅探的标志,但这是针对 TVP 的!哪个工作有点不同(我不太确定 - 显然没有嗅探TVP的?)。
无论如何,如果我创建一个新的本地 TVP 并将行插入其中,那么我会得到一个很好的执行计划!
CREATE PROCEDURE [dbo].[TVPSniffTest] (
@GuidList dbo.Guid_LIST readonly
)
AS
BEGIN
DECLARE @GuidList2 dbo.Guid_LIST
INSERT INTO @GuidList2
SELECT * FROM @GuidList
--query code here using @GuidList2, produces a good plan!
END
到底是怎么回事?
编辑我尝试了许多查询优化器提示,但它们不起作用。包括建议的重复问题中的一个。这几乎就像糟糕的计划(缓慢的计划),在估计的行数方面是正确的。快速计划对行数的估计不正确。