SQL查询从.NET代码开始很慢,但不是交互式的
发布时间:2020-12-12 06:35:19 所属栏目:MsSql教程 来源:网络整理
导读:我们正在使用一个ORM来执行从.NET到SQL Server的sp_executesql存储过程的调用. 当从.NET调用存储过程时,我们会收到超时异常. 看看Profiler,我可以看到查询确实需要很长时间才能执行. 查询基本上是: exec sp_executesql N'SELECT DISTINCTFROM [OurDatabase].
我们正在使用一个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选择更正确的选项而不是更好的选项.而不是仅仅将您的参数转换为varchar,这将是一个可能会丢失信息的缩小转换,数据库将被强制将表中该列的每个值转换为nvarchar(保证成功而不会丢失信息) .这不仅速度慢,而且Sql Server将无法再使用索引.不用说,查询将花费更长的时间来运行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |