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

IAb*_*act 1 c# sql-server

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

command.Parameters.Add(ParamFoo, SqlDbType.Int)
command.Parameters(ParamFoo).Value = fooVal
Run Code Online (Sandbox Code Playgroud)

样本2:

command.Parameters.AddWithValue(ParamBar, barVal)
Run Code Online (Sandbox Code Playgroud)

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

Rem*_*anu 6

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

但是,当barVal是String类型时,存在一个非常大的已知问题.SqlClient将参数添加为NVARCHAR类型,当在SQL表达式中与VARCHAR列进行比较时,SQL 类型优先规则将要求将列转换为NVARCHAR而不是要转换为VARCHAR的变量,这会更改索引寻求表扫描并产生灾难性的后果.