Je veux optimiser ce SP, tout le monde a une idée de comment je peux faire cela? Merci d'avance.optimisation 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
Avez-vous un plan de requête? Pourquoi pensez-vous que cette ligne est un problème de performance? – Oded
ce n'est pas sur la performance comme c'est pour la condition. tous ces paramètres sont pour un champ de données -> orderstatusID. Si tous sont null, je n'obtiens aucun résultat, mais j'aime obtenir des résultats même quand ils sont nuls, les résultats devraient être basés sur les paramètres pour les autres champs de données – Laziale
Jetez un oeil à l'article de Gail Shaw sur [ requêtes fourre-tout] (http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/). –