将SqlDataRecords传递给程序比没有程序慢9倍?

时间:2016-08-05 17:29:42

标签: c# sql-server performance table-valued-parameters

我有一个带有几个参数的存储过程。我的数据表类型有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)。

1 个答案:

答案 0 :(得分:0)

我建议运行SQL事件探查器来检查数据库上的查询。您还可以通过右键单击数据库,点击“活动监视器”来查看使用SSMS活动监视器,并且可能会很幸运,并且会看到最近的昂贵查询。

HTH