首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用存储过程是缓慢的。

调用存储过程是缓慢的。
EN

Stack Overflow用户
提问于 2011-04-05 14:58:52
回答 2查看 3.8K关注 0票数 8

当然,一切都是相对的,但是与使用查询管理器执行相同的SQL相比,有很大的不同。

我使用了分析器来查看当LINQ调用存储过程时数据库执行了哪些SQL语句。结果在大约1400 2ms内返回,如果我复制/粘贴SQL并通过查询管理器运行完全相同的SQL,结果将在2ms内返回。这让我想知道我是否需要做些什么?这里有人有过类似的经历吗?

以下是来自LINQ的SQL发送:

代码语言:javascript
复制
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#代码很简单:

代码语言:javascript
复制
using( BRSDataContext dc = new BRSDataContext() )
{
    dc.TapeInfo_Get(false, false, false, false, false, false, false, false, false, false, false, null, true, null, false, null, null, null, false, query, startRowIndex, count, false)
}

我遗漏了什么吗?有什么想法能如此显著地影响演出吗?数据库(MSSQL 2008)和承载执行LINQ的asp.net站点的are服务器位于同一个网络上,并且都在运行WindowsServer2008STD 32位。

谢谢你的帮助。

溶液

代码语言:javascript
复制
SET ARITHABORT ON;

因此,这不是LINQ问题,而是更常见的Server问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-06 16:07:09

将算术设置为on;只是为了测试它。有几种建议的方法来解决这个问题。一种是在存储过程中添加"with recompile“。但是我通常通过不直接使用输入参数来修复它。

例:

代码语言:javascript
复制
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/

票数 11
EN

Stack Overflow用户

发布于 2013-02-20 20:02:43

这里是用来设置算术的linq的C#;

代码语言:javascript
复制
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(myConnectionString);
System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand("set arithabort on;", conn);
command.Connection.Open();
command.ExecuteNonQuery();
CMyDataContext myDataContext = new CMyDataContext(conn);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5553967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档