代码和 SSMS 之间的查询性能差异
开发人员在 C# 代码和 SQL Server 管理中执行相同查询时遇到显着的性能差异工作室(SSMS)。虽然查询在 SSMS 中不到 3 秒就完成了,但在应用程序中运行时却花了 3 分钟多。
性能问题的根本原因
经过进一步检查,该问题被确定为 C# 代码和 SSMS 中使用的查询参数之间的细微差别。在 C# 代码中,客户端 ID 的参数作为 NVARCHAR 类型传递,而在 SSMS 查询中,它被声明为 VARCHAR 类型。
数据类型优先级影响
由于数据类型优先规则,C# 查询中的 NVARCHAR 参数阻止查询利用索引查找。这导致了表扫描,显着增加了执行时间。相比之下,SSMS 查询中的 VARCHAR 参数允许查询优化器使用索引查找,从而提高执行速度。
性能问题的解决方案
解决性能差异,开发者有两个选择:
选项1:使用指定类型的参数
通过使用接受类型的构造函数,开发者显式地将参数定义为VARCHAR类型:
Parameters.Add("@clientID", SqlDbType.Varchar, 200)
这保证了参数作为正确的类型传递,并且不会干扰 SARG 的能力
选项 2:在 SQL 查询中转换参数
或者,开发人员可以在 SQL 查询中转换参数,如下所示:
where client_id = cast(@clientID as varchar(200))
此方法还解决了类型问题并允许查询利用索引
其他建议
以上是为什么 C# 中的 SQL 查询比 SSMS 慢 3 分钟?的详细内容。更多信息请关注PHP中文网其他相关文章!