C#学习教程:在SSMS中运行良好的SQL查询在ASP.NET中运行非常缓慢从SQLServerManagementStudio执行时运行良好(在1到2秒内),但是当从SQLCommand中的ASP.NET执行时,查询需要更长的时间,除了一个之外我似乎无法弄清楚发生了什么自问题开始以来已添加到查询中的行,但我找不到问题所在。添加的有问题的代码是第6行:bi.INGR_CODE!=0SQL语句SELECTbh.JOB_NUMBER,j.DESCRIPTION,SUM(bi.INGR_ACTUAL)ASTOTALFROMBATCH_HEADERASbhLEFTOUTERJOINBATCH_INGRASbiONbh.BATCH_ID=bi.BATCH_IDANDbh.FACTORY=bi.FACTORYANDbi.INGR_CODE0左外连接ServerNameReplaced.man_prod.dbo.JOBSASjONbh.JOB_NUMBER=j.JOB_NUMBERCOLLATEdatabase_defaultANDbh.FACTORY=j.FACTORYCOLLATEdatabase_defaultWHERE(bh.FACTORY=@Factory)AND(bh.DATETIME_DUMP>=@StartDate)AND(bh.DATETIME_DUMP<@EndDate)GROUPBYbh.JOB_NUMBER,j.DESCRIPTIONORDERBYbh.JOB_NUMBERASP.NET代码文件背面//临时列表Listdata=newList();字符串SQLCommand=DBHelper.LoadSQLStatement("batchdescription.sql");System.Data.SqlClient.SqlConnectionsqlConnection=newSystem.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionStringNameReplaced"].ConnectionString);System.Data.SqlClient.SqlCommandsqlCommand=newSystem.Data.SqlClient.SqlCommand(SQLCommand,sqlConnection);尝试{sqlCommand.Parameters.Add("@StartDate",System.Data.SqlDbType.DateTime).Value=StartDate;sqlCommand.Parameters.Add("@EndDate",System.Data.SqlDbType.DateTime).Value=EndDate;sqlCommand.Parameters.Add("@Factory",System.Data.SqlDbType.VarChar,2).Value=Factory;sqlConnection.Open();SqlDataReaderDataReader=sqlCommand.ExecuteReader();while(DataReader.Read()){data.Add(newBatchItem(){JobNumber=DataReader[0].ToString(),Description=DataReader[1].ToString(),Total=decimal.Parse(DataReader[2].ToString())});}}catch(Exceptionex){//处理异常}finally{sqlConnection.Close();有各种各样的事情可能发生首先,IvanG.是正确的,SSMS连接参数和SET选项在ASP.NET客户端之间可能不同。如果您有权访问Profiler,则需要注意这一点。其次,如果您在SSMS中连续多次运行查询,结果可能会被缓存,这就是它在SSMS中运行如此之快的原因。如果您第一次打开SSMS并尝试运行它时它运行缓慢,但随后速度加快,则表明缓存正在运行。至于为什么在连接中添加一个额外的子句会减慢速度,在不了解更多表的情况下很难说如何解决这个问题,但这并非不可能。BATCH_INGR上有包含FACTORY和INGR_CODE的吗?您现在可能需要在连接条件中包含INGR_CODE。找出答案的最佳方法是查看带有和不带有INGR_CODE子句的查询计划,看看它们有何不同。一个查询的成本数字是否大于另一个查询的成本数字?是否有以前没有的表扫描?索引搜索变成索引扫描?我以前不得不费心去拍摄这些照片,它们并不有趣,但根据我的经验,我看到的是在ASP.NET和SSMS中运行查询之间的不同执行计划。ASP.NET不缓存查询,SSMS缓存查询,但有时执行计划实际上是不同的。罪魁祸首通常是乱序访问的坏索引,这里是我倾向于使用的指南:http://www.sommarskog.se/query-plan-mysteries.html这是因为查询计划缓存不一样。这是因为你的代码和SSMS没有使用相同的设置,并且因为参数欺骗(即SqlServer根据第一次sp执行和这次发送的参数创建计划缓存)=>当你通过代码执行并通过SSMS执行时你没有相同的查询执行计划。为确保您使用相同的计划:工具->查询执行->SQLServer->高级->取消选中“SETARITHABORT”以避免在您提到的存储过程中调用另一个存储过程。这将解决你的问题以上是C#学习教程:在SSMS中运行良好的SQL查询在ASP.NET中运行非常慢的全部内容分享,如果对你有用,需要进一步了解C#学习教程,希望大家以后会多多关注~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
