我有帐单应用程序,它具有一些报告生成功能。运行6-7个月后,我面临有线问题。我的sql语句在管理工作室编辑器中完美运行(4秒执行),但是当我将相同的查询放到SP时,需要(1分9秒执行相同的查询)。表有150K行。下面是我在SP中使用的查询。我的应用程序显示超时过期异常消息。我尝试将连接字符串中的超时设置为180秒。 (对于临时解决方案),但没有正面结果。存储过程性能问题
ALTER PROCEDURE [dbo].[rpt_GetShiftEndReport](
@BillDate varchar(10),
@JobShift int,
@MonthStartDate varchar(10),
@MonthEndDate varchar(10)
)
AS
--begin tran
SET NOCOUNT ON;
SELECT Products.pCode AS ProductCode, MIN(Products.pName) AS ProductName, MIN(Products.pSize) AS ItemSize, MIN(I.gName) AS GroupName, Sales_Trans.Price,
SUM(Sales_Trans.Sales_Qty) AS SalesQty, SUM(Sales_Trans.Sales_Value) AS SalesValue, SUM(Sales_Trans.Break_Qty) AS BreakQty,
SUM(Sales_Trans.Break_Value) AS BreakValue, SUM(Sales_Trans.Return_Qty) AS ReturnQty, SUM(Sales_Trans.Return_Value) AS ReturnValue,
MIN(Products.CloseStock) AS Stock, MIN(Products.pGroup) AS GroupCode,
dbo.GetCummulativeSales(@MonthStartDate, @MonthEndDate, Products.pCode) AS CummSales
FROM Products INNER JOIN
(SELECT SalesLog_1.ProductCode, SalesLog_1.Price, SalesLog_1.Quantity AS Sales_Qty, SalesLog_1.Price * SalesLog_1.Quantity AS Sales_Value,
0 AS Break_Qty, 0 AS Break_Value, 0 AS Return_Qty, 0 AS Return_Value
FROM SalesLog AS SalesLog_1 INNER JOIN
Sales ON SalesLog_1.MemoNo = Sales.MemoNo
WHERE (SalesLog_1.BillDate = @BillDate) AND (Sales.JobShift = @JobShift)
UNION ALL
SELECT ProductCode, Price, 0 AS Sales_Qty, 0 AS Sales_Value, 0 AS Break_Qty, 0 AS Break_Value, Quantity AS Return_Qty,
Price * Quantity AS Return_Value
FROM SalesReturn
WHERE (BillDate = @BillDate) AND (JobShift = @JobShift)
UNION ALL
SELECT ProductCode, Price, 0 AS Sales_Qty, 0 AS Sales_Value, Quantity AS Break_Qty, Price * Quantity AS Break_Value, 0 AS Return_Qty,
0 AS Return_Value
FROM Breakages
WHERE (BillDate = @BillDate) AND (JobShift = @JobShift)) AS Sales_Trans ON Products.pCode = Sales_Trans.ProductCode INNER JOIN
ItemGroup AS I ON I.gCode = Products.pGroup
GROUP BY Products.pCode, Sales_Trans.Price
ORDER BY GroupCode, ItemSize DESC;
任何人都可以建议我现在该做什么。我不认为它的查询问题可能不会。的行。
您确定您在SP中的参数与查询中的参数值相同(当您不使用SP时)吗? – 2011-03-19 17:57:43
是的,我从SP复制了值到查询 – 2011-03-19 17:59:58
抱歉,声音唠叨......但是,有3个varchar(日期)参数。你有没有确保你为每个值传递了合适的(和期望的)值,并且当你使用SP时,这些参数之间的值没有得到交换?对不起,只是检查.. – 2011-03-19 18:03:41