SQL中的隐式数据类型转换是否会影响性能?

时间:2010-05-19 22:04:16

标签: c# sql-server

我有2个样本可以有效地做同样的事情 - 样本1:

command.Parameters.Add(ParamFoo, SqlDbType.Int)
command.Parameters(ParamFoo).Value = fooVal

样本2:

command.Parameters.AddWithValue(ParamBar, barVal)

建议使用哪种样品?我知道第二个样本正在进行一些转换。不要求转换并使用第一个样本不是最好的吗?

1 个答案:

答案 0 :(得分:6)

当您发布代码时,完全无关紧要。两种变体的执行方式相同,您无法根据数据库调用的大背景来衡量客户端转换的成本。

但是,当barVal是String类型时,存在一个非常大的已知问题。 SqlClient将参数添加为NVARCHAR类型,当在SQL表达式中与VARCHAR列进行比较时,SQL type precedence rules将要求转换为NVARCHAR而不是变量为转换为VARCHAR,这改变索引寻求表扫描,并带来灾难性的性能后果。