【发布时间】:2013-06-22 01:47:29
【问题描述】:
我的查询结构如下:
SELECT DISTINCT (CO.CateringOrderId),
CO.CateringOrderNumber,
MC.FirstName + ' ' + MC.LastName AS "CustomerName",
CO.EventDate AS EventDate,
CO.IsCompleted,
CO.IsVerified,
MC.EmailId,
CAT.OfficePhone,
CAT.Mobile,
CAT.Fax,
CO.TotalInvoiceAmount,
CO.BarterCharityId,
(SELECT Sum (Amount)
FROM Catering_Order_Payment_Trans
WHERE CateringOrderId = CO.CateringOrderId) AS AmountReceived
FROM Catering_Orders CO,
Master_Customer MC,
Customer_Address_Trans CAT,
Catering_Order_Employee_Trans COET
WHERE MC.CompanyId = @p_CompanyId
AND (MC.CustomerId = @p_CustomerId OR @p_CustomerId = -1)
AND (CO.CateringOrderNumber LIKE '%' + @p_CateringOrderNumber + '%')
AND (CO.EventDate >= CONVERT (DATETIME, @p_FromDate) OR @p_FromDate = '')
AND (CO.EventDate <= CONVERT (DATETIME, @p_ToDate) OR @p_ToDate = '')
AND (CO.IsCompleted = @p_IsCompleted OR @p_IsCompleted = -1)
AND (COET.EmployeeId = @p_CatererId OR @p_CatererId = -1)
AND MC.CustomerId = CO.CustomerId
AND MC.PersonalAddressId = CAT.CustomerAddressId
AND (COET.CateringOrderId = CO.CateringOrderId
OR CO.CateringOrderId NOT IN
(SELECT CateringOrderId FROM Catering_Order_Employee_Trans))
AND (CAT.Mobile like '%' + @p_ContactNumber + '%' )
AND (CO.IsActive is null or CO.IsActive=1)
ORDER BY CO.CateringOrderId DESC
我认为SUM 子查询会减慢它的速度。请建议我如何加快速度。
目前它的执行时间约为 7 - 10 秒。
【问题讨论】:
-
执行计划是什么样的? SQL Server 应该能够将该查询去关联到左外连接。
-
请提供完整的查询示例。
-
@Devart 我已经更新了问题
-
那
DISTINCT隐藏了不正确的JOIN条件吗?COET.CateringOrderId = CO.CateringOrderId OR CO.CateringOrderId NOT IN ...在我看来很可疑。也请考虑使用ANSI 92JOIN关键字。这样可以更轻松地查看您是否有任何无意的交叉连接。 -
@MartinSmith 谢谢让我看看
标签: sql sql-server subquery query-optimization