【发布时间】:2016-08-05 17:29:42
【问题描述】:
我有一个带有几个参数的存储过程。我的数据表类型有 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 次迭代需要 11281 毫秒(443/秒),没有表值参数 - 1029 毫秒(4856/秒)。
【问题讨论】:
-
发布您的存储过程以及您如何通过
IEnumerable -
研究优化未知
-
@JoelCoehoorn 优化未知数?
-
@dariol,包括你的 IEnumerable 代码。
-
具体时间是多少(以毫秒为单位)?没有规模的慢9倍没什么好说的。您通过该表参数发送的数据量是多少?即使 sproc 不使用它,自然也会涉及一些开销。
标签: c# sql-server performance table-valued-parameters