ADO.NET与SSMS中的SQL Server性能

Bro*_*sto 5 sql-server ado.net sql-server-2008

在开始之前,我已经阅读了几篇关于过去性能问题的帖子,人们已经在ADO和SSMS中执行了SQL语句/过程.我花了大部分时间试图自己解决这个问题...重新索引,使用sp_recompile,添加Option(Recompile)到我的程序.没有任何工作,所以我转向社区寻求帮助.

我有一个存储过程,我的一个Web应用程序执行运行报告.特别是这个过程主要由动态SQL组成,以允许不同的报告结果返回...在我的网站上有点动态报告功能.无论如何,一些报告可以运行(使用相同的程序),结果几乎立即回来.但是,可以使用其他选项,并且该过程可能需要几分钟才能运行.但是,在SSMS中使用相同选项手动运行该过程可立即获得结果.这听起来像某种类型的计划缓存问题,但在重新编译过程并添加之后WITH(RECOMPILE),它仍然在ADO.NET中运行得非常慢.

所以我开始查看SQL配置文件,也许ADO正在使用的"SET"命令之一导致问题.但是,在使用完全相同的SET命令后,它几乎立即使用SSMS返回.

我尝试使用DBCC freeproccacheDBCC freesystemcache清除任何存储的计划,但这也没有帮助.

我尝试的另一件事是获取在过程中生成的动态SQL并直接在SqlCommand语句中运行它.这里没有参数,只是普通的SQL.它再次在SSMS中立即运行,但在ADO.NET中永远存在.

有没有办法(运行ADO.NET)来查看生成的计划?我可以在SSMS中做到这一点,但是这对我没有帮助,因为它在SSMS中运行良好.

如果有任何帮助,这里是原始的SQL语句......

SELECT sf.ID [FileID], sb.ID [BillID], sb.Client_BillID, sf.BobID [ClientID], c.Name [ClientName], c.Parent_ID [ParentID], pnt.Name [ParentName], Network_ID, Facility_Name, OON, sb.TaxID, Inpatient, sf.ProcessDate, sb.Reversed, sb.State, sb.Product, sb.FormType, n.Direct 
INTO #t1 FROM SubmitterFiles sf WITH(NOLOCK) 
INNER JOIN SubmitterBills sb WITH (NOLOCK) ON sf.ID = sb.FileID 
LEFT JOIN PPORecords r WITH (NOLOCK) ON sb.RecordID = r.ID 
LEFT JOIN PPONetworks n WITH (NOLOCK) ON r.Network_ID = n.ID 
LEFT JOIN PPOProviders p WITH (NOLOCK) ON r.Provider_ID = p.ID 
INNER JOIN Clients c WITH (NOLOCK) ON sf.BobID = c.ID 
LEFT JOIN Clients pnt WITH (NOLOCK) ON c.Parent_ID = pnt.ID 
WHERE sf.ProcessDate BETWEEN 'Dec  1 2012 12:00AM' and 'Dec 31 2012 12:00AM' 
AND ISNULL(sb.Status,'') NOT IN ('E','V') 
AND (c.Parent_ID IN (1989) or c.ID  IN (1989)) 
; 

SELECT TOP 100 0 as [placeholder],NULL AS BillID, NULL AS Client_BillID, NULL AS DOS
,NULL AS Network_ID
,NULL AS Client_ID
,NULL AS Client_Name
,NULL As ProcessDate
,NULL As ProcessMonth
,NULL AS SubClientID
,NULL AS SubClientName
,Product
,TaxID
, FacilityName
, LastName
, FirstName
,State
,County
,NULL As ProcCode
,NULL As FormType
,NULL As Inpatient, NULL AS Outpatient
,COUNT(DISTINCT sb.BillID) AS [Total_Bills]
,SUM(sl.Amount) AS  [Total_Charges]
,SUM(sl.StateSavings) AS [Total_StateSavings]
,SUM(sl.PPOSavings) AS [Total_PPOSavings]
,COUNT(DISTINCT TaxID) AS [Total_Unique_TaxIds]
,0,0,0,0,0
,COUNT(DISTINCT CASE WHEN sb.OON = 1 THEN sb.BillID ELSE NULL END) AS [Out_Bills]
,SUM(CASE WHEN sb.OON = 1 THEN sl.Amount ELSE 0 END) AS [Out_Charges]
,SUM(CASE WHEN sb.OON = 1 THEN sl.StateSavings ELSE 0 END) AS [Out_StateSavings]
,COUNT(DISTINCT CASE WHEN sb.OON = 1 THEN sb.TaxID ELSE NULL END) AS [Out_Unique_TaxIds]
,0,0,0,0,0
,0,0,0,0,0
 FROM SubmitterLines sl  WITH (NOLOCK, INDEX(IX_SubmitterLines_BillID))
 INNER JOIN #t1 sb WITH(NOLOCK) ON sl.BillID = sb.BillID
 INNER JOIN SubmitterBillProviders sbp WITH(NOLOCK) ON sb.BillID = sbp.ID
 INNER JOIN SubmitterBillZipCounty sbc WITH(NOLOCK) ON sb.BillID = sbc.ID
 WHERE 1 = 1
GROUP BY Product
,TaxID
,FacilityName, LastName, FirstName
,State
,County
ORDER BY [Out_Bills] DESC
Run Code Online (Sandbox Code Playgroud)

Pet*_*din 0

你看过这个SO线程吗?SQL Server 查询在 ADO.NET 中的运行速度比在 SSMS 中慢

正如已接受的答案中所建议的那样,Showplan XML 事件类可以工作吗?