存储过程要怎么写才性能高
最爱午夜 2014-08-04 04:12:38 以下是存储过程是一个示例:
create Procedure [dbo].[Test]
@OrderInfoID AS INT=-1,
@GroupInfoID as int=-1,
@AccountId AS INT =-1,
@BuyerName NVARCHAR(255)='',
@BuyerAccount NVARCHAR(255)='',
@Address nvarchar(500)='',
@eBayItemNumber NVARCHAR(20)='',
@eBayItemName nvarchar(500)='',
@Sum money=-1,
@SalesRecordNo nvarchar(20)='',
@IsPaid AS CHAR(1)='',
@PaypalTransactionID NVARCHAR(255)='',
@IsSendOff as char(1)='',
@IsMaintainPostage as money=1,
@eBayOrderId nvarchar(20)='',
@PostOrderDateFrom datetime='1900-1-1',
@PostOrderDateTo datetime='1900-1-1'
AS
SELECT oi.*, ao.DifferPrice
FROM table1 oi WITH(NOLOCK)
LEFT JOIN dbo.table2 ao ON ao.OrderGUID = oi.GUID
WHERE (@OrderInfoID = -1 OR OrderInfoID = @OrderInfoID) AND
(@GroupInfoID=-1 OR oi.GroupInfoID=@GroupInfoID) AND
(@AccountId = - 1 OR AccountId = @AccountId) AND
(@IsPaid = '' OR IsPaid = @IsPaid) AND
(@PaypalTransactionID = '' OR PaypalTransactionID = @PaypalTransactionID) AND
(@Sum=-1 OR TotalPrice=@Sum) AND
(@BuyerName='' OR BuyerName like '%'+@BuyerName+'%') AND
(@BuyerAccount='' OR BuyerAccount like '%'+@BuyerAccount+'%') AND
(@Address='' OR Address like '%'+@Address+'%') AND
(@eBayItemNumber='' OR eBayItemNumber like '%'+@eBayItemNumber+'%') AND
(@eBayOrderId='' OR eBayOrderId like '%'+@eBayItemNumber+'%') AND
(@eBayItemName='' OR eBayItemName like '%'+@eBayItemName+'%') AND
(@SalesRecordNo='' OR SalesRecordNo=@SalesRecordNo) AND
(@IsSendOff='' OR IsSendOff=@IsSendOff) AND
(@IsMaintainPostage=1 OR (Postage<=0.1 AND SalePrice<=1)) AND
(@PostOrderDateFrom='1900-1-1' or (PostOrderDate>=@PostOrderDateFrom and PostOrderDate<=@PostOrderDateTo))
ORDER BY PostOrderDate desc
仅仅讨论一下参数带默认值而使用OR的这方面,这样的存储过程性能能高到哪里去?
如果采用拼接字符串的方式,存储过程又很难维护,怎么办?