gpt4 book ai didi

.NET 代码中的 SQL 查询速度较慢,但​​不是交互式的

转载 作者:行者123 更新时间:2023-12-02 13:03:24 24 4
gpt4 key购买 nike

我们使用的 ORM 正在执行从 .NET 到 SQL Server 的 sp_executesql 存储过程的调用。

当从 .NET 调用存储过程时,我们收到超时异常。

查看 Profiler,我可以看到该查询确实需要很长时间才能执行。

查询本质上是:

exec sp_executesql N'SELECT DISTINCT
FROM [OurDatabase].[dbo].[Contract] [LPLA_1] ) [LPA_L1]
LEFT JOIN [OurDatabase].[dbo].[Customer] [LPA_L2] ON [LPA_L2].[Customer_ID]=[LPA_L1].[CustomerId] AND [LPA_L2].[Data]=[LPA_L1].[Data])
WHERE ( ( ( ( ( [LPA_L1].[DealerId] = @DealerId1))
AND ( [LPA_L2].[Last_Name] = @LastName2))))',N'@DealerId1 varchar(18),@LastName2 varchar(25)',@DealerId1='1234',@LastName2='SMITH'

令我困惑的部分是:如果我将超时的查询复制并粘贴到 SQL Management studio 中并以交互方式执行它,它执行得很好。

有谁知道为什么通过 .NET 代码执行相同的查询会花费更长的时间? (我能够重现这一点 - 从代码执行的查询始终超时,并且以交互方式执行的查询始终工作正常。)

感谢任何帮助。谢谢!

最佳答案

我见过几次的一件事是,索引字段上的查询参数的 nvarchar 和 varchar 类型之间是否不匹配。如果您在数据库中使用 varchar 并且未在 .Net 中显式设置参数类型(默认情况下将采用 nvarchar),则可能会发生这种情况。

在这种情况下,Sql Server 将选择更正确的选项,而不是性能更好的选项。数据库将被迫将表中该列的每个值转换为 nvarchar(保证成功且不会丢失信息),而不是仅仅将参数转换为 varchar(这是一种可能会丢失信息的缩小转换) 。不仅速度慢,而且 Sql Server 将无法再使用该索引。不用说,查询将需要更长的时间来运行。

关于.NET 代码中的 SQL 查询速度较慢,但​​不是交互式的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1509561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com