我有一个带有几个参数的存储过程。我的数据表类型有2列(int, nvarchar
)。
当我运行此存储过程并使用已定义类型传递IEnumerable<SqlDataRecords>
时,我的计算机上的查询结果比同一存储过程慢9倍而不传递此参数。
存储过程无法触及此参数。只是路过。
看起来某事(sql server?)对数据传递为结构化(表值)值。
也许我错过了什么。也许有特殊的转换:
类型:
CREATE TYPE dbo.MyData AS TABLE
(
[Ver] INT NOT NULL,
[Name] NVARCHAR(225) NOT NULL
)
存储过程:
CREATE PROCEDURE [dbo].[SaveData]
(@Id UNIQUEIDENTIFIER, @Data MyData READONLY)
AS
BEGIN
SET NOCOUNT ON;
END
更新1:
我改变了查询。此存储过程不执行任何操作差异在于传递值或为空。
更新2:
添加了存储过程和类型定义。
更新3:
我使用的是SQL Server 2014 Express。
更新4:
参数5000次迭代需要11281ms(443 / sec),没有表值参数 - 1029ms(4856 / sec)。
答案 0 :(得分:0)
我建议运行SQL事件探查器来检查数据库上的查询。您还可以通过右键单击数据库,点击“活动监视器”来查看使用SSMS活动监视器,并且可能会很幸运,并且会看到最近的昂贵查询。
HTH