Ich möchte diesen SP zu optimieren, jemand eine Idee, wie ich das tun kann? Danke im Voraus.Optimierung SQL SP
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Members] (
@StartTime datetime = null
, @EndTime datetime = null
, @CustomerEmail nvarchar(255) = null
, @CustomerName nvarchar(255) = null
, @ShippingMethod nvarchar(255) = null
, @MemberOrderStatusPending int = null
, @MemberOrderProcessing int = null
, @MemberOrderComplete int = null
, @MemberOrderStatusCancelled int = null
, @MemberOrderStatusCancelledDiscontinued int = null
, @MemberOrderStatusCancelledCustomerRequest int = null
, @MemberOrderStatusCancelledPendingNeverPaid int = null
)
AS
BEGIN
SET NOCOUNT ON
SELECT DISTINCT o.OrderID
, o.OrderTotal
, o.BillingFirstName + ' ' + o.BillingLastName AS CustomerName
, o.CreatedOn AS CreatedOn
FROM Order o
WHERE (o.CreatedOn > @StartTime OR @StartTime IS NULL)
AND (o.CreatedOn < @EndTime OR @EndTime IS NULL)
AND (o.ShippingEmail = @CustomerEmail OR @CustomerEmail IS NULL)
AND (o.BillingFirstName + ' ' + o.BillingLastName = @CustomerName OR @CustomerName IS NULL)
AND (o.ShippingFirstName + ' ' + o.ShippingLastName = @CustomerName OR @CustomerName IS NULL)
AND (o.ShippingMethod = @ShippingMethod OR @ShippingMethod IS NULL)
AND (o.OrderStatusID = @MemberOrderProcessing
OR o.OrderStatusID = @MemberOrderProcessing
OR o.OrderStatusID = @MemberOrderComplete
OR o.OrderStatusID = @MemberOrderStatusCancelled
OR o.OrderStatusID = @MemberOrderStatusCancelledDiscontinued
OR o.OrderStatusID = @MemberOrderStatusCancelledCustomerRequest
OR o.OrderStatusID = @MemberOrderStatusCancelledPendingNeverPaid
OR @MemberOrderProcessing IS NULL
OR @MemberOrderProcessing IS NULL
OR @MemberOrderComplete IS NULL
OR @MemberOrderStatusCancelled IS NULL
OR @MemberOrderStatusCancelledDiscontinued IS NULL
OR @MemberOrderStatusCancelledCustomerRequest IS NULL
OR @MemberOrderStatusCancelledPendingNeverPaid IS NULL)
ORDER BY
o.OrderID
END
Haben Sie einen Abfrageplan? Warum denken Sie, dass diese Linie ein Leistungsproblem ist? – Oded
es geht nicht um die Leistung wie es für die Bedingung ist. all diese Parameter sind für ein Datenfeld -> orderstatusID. Wenn alle null sind, bekomme ich keine Ergebnisse, aber ich möchte Ergebnisse erhalten, selbst wenn sie null sind, die Ergebnisse sollten auf den Parametern für die anderen Datenfelder basieren. – Laziale
Werfen Sie einen Blick auf Gail Shaws Blog-Post auf [ Catch-All-Abfragen] (http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/). –