为什么在代码中执行查询比在 SSMS 中执行要慢得多?
尽管具有相同的查询和执行环境,查询可能会与 SQL Server Management Studio (SSMS) 相比,在代码中运行时表现出显着的时间差异。这个问题深入探讨了这种差异的根本原因。
调查问题
提供的代码比较揭示了 @clientID 参数的数据类型之间的差异C# 代码和 SSMS 脚本。在 C# 中,AddWithValue 方法将参数添加为 NVARCHAR,而在 SSMS 中,参数被声明为 VARCHAR。
数据类型优先级和 SARG 能力
由于数据类型优先规则,当 @clientID 为时,Where client_id = @clientID 表达式将变为不可 SARG(搜索参数)类型为 NVARCHAR,假设 client_id 列的类型为 VARCHAR。这会迫使查询优化器执行代价高昂的表扫描。
解决方案
要解决此差异,可以:
SqlParameter clientIDParam = new SqlParameter("@clientID", SqlDbType.Varchar, 200); clientIDParam.Value = ClientID; ada.SelectCommand.Parameters.Add(clientIDParam);
Where client_id = cast(@clientID as varchar(200))
显式指定数据类型有助于防止潜在的缓存污染问题。
进一步注意事项
通过了解这些数据类型的微妙之处并实施推荐的解决方案,您可以解决代码和 SSMS 之间的查询性能差异。
以上是为什么我的 SQL 查询在代码中比在 SSMS 中慢得多?的详细内容。更多信息请关注PHP中文网其他相关文章!