2012-04-16 41 views
13

我一直有这个问题几个星期了。问题是查询需要4-5分钟才能在网站上运行,最多2到3秒钟才能在ssms中运行。此外,我发现在对这个查询进行更改(如添加customerId变量)之后,它将开始在网页上快速运行,但到第二天再次变慢。有问题的查询是这一个:sql在asp.net中运行速度很慢sslms

DECLARE @customerID INT 
SET @customerID = @CustID 
DECLARE @MyTable table(
Iden int NOT NULL IDENTITY(1,1), 
ProductID int) 

INSERT INTO @MyTable(ProductID) 
SELECT P.ProductID FROM Product P WITH (NOLOCK) 
left join Compunix_ProductMMY cpmmy with (nolock) on p.ProductID = cpmmy.ProductID 
left join Compunix_CustomerMMY ccmmy with (nolock) on ccmmy.mmyid = cpmmy.mmyid 
WHERE P.Deleted=0 AND P.Published=1 and (ccmmy.customerid = @customerID OR cpmmy.productid IS NULL) 

SELECT c.Name, c.SeName, c.CategoryID 
FROM Category c WITH (NOLOCK) 
JOIN ProductCategory PC With (NOLOCK) ON C.CategoryID = PC.CategoryID 
JOIN @MyTable MT ON PC.ProductID=MT.ProductID 
WHERE C.Published = 1 
GROUP BY c.Name, c.SeName, c.CategoryID 
ORDER BY c.Name 

我有相同的查询运行2其他网站上工作得很好。两个站点之间唯一的区别在于它们运行在不同的数据库上,而慢速站点比其他站点上的产品(54000个产品)多一倍以上。所有三个站点及其数据库都托管在同一台机器上。

+1

您应该标记答案。最有可能你有参数嗅探问题 – mellodev 2012-06-14 20:32:48

回答

18

很有可能是您碰到参数嗅探问题。

我建议阅读由Erland Sommarskog编辑的Slow in the Application, Fast in SSMS?以获得对该问题的完整理解(很长的文章,但非常好)。

8

查看您的ASP.Net应用程序和您的SSMS会话的sys.dm_exec_sessions。我会冒险猜测您的至少一个SET设置是不同的。这可能会导致不同的计划(最终这归因于参数嗅探),而应用程序端通常会变得更糟。

看到这些其他问题的更多细节:

Stored procedure slow when called from web, fast from Management Studio

Procedure times out from ADO.NET but not in SSMS

Query times out when executed from web, but super-fast when executed from SSMS

ADO .NET vs. SQL Server Management Studio - ADO performs worse

+0

什么是SET设置? – crh225 2016-11-07 14:57:54

+0

@ crh225事情'SET ARITHABORT','SET QUOTED_IDENTIFIER'等https://technet.microsoft.com/en-us/library/ms190707(v=sql.105).aspx – 2016-11-07 20:27:59

1

为了什么它的价值,非常偶然,我们遇到同样的问题;可能是一年一次。你可以花一周时间阅读和消化其他答案中提到的所有优秀资源,或者你可以做我们的工作;停止并启动SQL Server。

它工作的一种享受。

我们已经注意到,这个问题通常发生在各种不同的schema/sp/view模块之后,这些模块可能与手头的问题没有直接关系。

相关问题