.net – LINQ调用存储过程很慢
发布时间:2020-12-12 06:37:25 所属栏目:MsSql教程 来源:网络整理
导读:当然,一切都是相对的,但与使用查询管理器简单地执行相同的SQL相比,存在很大的差异. 我使用分析器来查看LINQ调用存储过程时数据库执行的SQL语句.结果在大约1400ms内返回,如果我复制/粘贴SQL并通过查询管理器运行完全相同的SQL,结果将在2ms内返回.这让我想知道
当然,一切都是相对的,但与使用查询管理器简单地执行相同的SQL相比,存在很大的差异.
我使用分析器来查看LINQ调用存储过程时数据库执行的SQL语句.结果在大约1400ms内返回,如果我复制/粘贴SQL并通过查询管理器运行完全相同的SQL,结果将在2ms内返回.这让我想知道我有什么需要做的吗?这里有人有类似的经历吗? 以下是LINQ的SQL发送: declare @p26 int set @p26=0 exec sp_executesql N'EXEC @RETURN_VALUE = [dbo].[TapeInfo_Get] @TapeFlag_IsDigitized = @p0,@TapeFlag_ChosenSingleTape = @p1,@TapeFlag_ChosenHierarchy = @p2,@TapeFlag_ChosenForced = @p3,@TapeFlag_ExcludedHierarchy = @p4,@TapeFlag_ExcludedARKBNR = @p5,@TapeFlag_ExcludedForced = @p6,@TapeFlag_ExcludedFilmRoll = @p7,@TapeFlag_ExcludedDVCPRO = @p8,@TapeFlag_ExcludedVHS = @p9,@TapeFlag_ExcludedType = @p10,@TapeFlag_NoticeBNR = @p11,@TapeFlag_NoticeMultiplePNR = @p12,@TapeFlag_NoticeType = @p13,@ProductionFlag_ExcudedDate = @p14,@ProductionFlag_NoticeMultipleTape = @p15,@ProductionFlag_NoticeFilm1C = @p16,@ProductionFlag_NoticeFilmBetaDigial = @p17,@ProductionFlag_ExcludedForeignProd = @p18,@Query = @p19,@PageIndex = @p20,@PageSize = @p21,@ReturnCount = @p22',N'@p0 bit,@p1 bit,@p2 bit,@p3 bit,@p4 bit,@p5 bit,@p6 bit,@p7 bit,@p8 bit,@p9 bit,@p10 bit,@p11 bit,@p12 bit,@p13 bit,@p14 bit,@p15 bit,@p16 bit,@p17 bit,@p18 bit,@p19 varchar(8000),@p20 int,@p21 int,@p22 bit,@RETURN_VALUE int output',@p0=0,@p1=1,@p2=1,@p3=1,@p4=0,@p5=0,@p6=0,@p7=0,@p8=0,@p9=0,@p10=0,@p11=0,@p12=0,@p13=0,@p14=0,@p15=0,@p16=0,@p17=0,@p18=0,@p19=NULL,@p20=0,@p21=10,@p22=0,@RETURN_VALUE=@p26 output select @p26 .Net C#代码很简单: using( BRSDataContext dc = new BRSDataContext() ) { dc.TapeInfo_Get(false,false,null,true,query,startRowIndex,count,false) } 有什么我想念的吗?什么能够如此戏剧性地影响性能? 谢谢您的帮助. 解: SET ARITHABORT ON; 所以它不是LINQ问题,而是更多的一般SQL Server问题. 解决方法设置arithabort;只是为了测试它.有几种推荐的方法可以解决此问题.一种是在存储过程中添加“with recompile”.但我通常不直接使用输入参数来修复它例如: create stored procedure foo( @ParamUserId int) as declare @UserId int set @UserId = @ParamUserId select * from Users where UserId = @UserId 或类似的东西. 这是一篇关于此事的好文章http://www.simple-talk.com/sql/t-sql-programming/parameter-sniffing/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – TSQL:Try-Catch Transaction in Trigger
- SQLserver/Oracle/MySQL数据库分页 SQL语句
- SQLSERVER 学习笔记(一) SQL基础 分组 限制结果集范围 抑
- sql-server – 如何从某个前缀获取所有存储过程及其参数的列
- SQL-Server数据库的实际限制
- sql – 关系型数据库后端为mercurial或git
- 解决SQLSERVER在还原数据时出现的“FILESTREAM功能被禁用”
- sql – 在postgres中分离从函数返回的记录
- sql-server – 实体框架高效查询
- 数据导出之sqlserver-导出脚本