【发布时间】:2020-05-28 18:46:44
【问题描述】:
有一种情况是我使用IF @SKU IS NULL OR @SKU = '',但我的朋友说与IF ISNULL(@SKU, '') = '' 相比需要更多时间。所以你应该使用IF ISNULL(@SKU, '') = ''。但我认为我使用的是正确的。所以请建议我哪一个跑得更快。
这是我的存储过程:
CREATE PROCEDURE USP_GetExistingRefunds
(
@OrderNo VARCHAR(50),
@SKU VARCHAR(255),
@ProfileID INT
)
AS
BEGIN
--IF ISNULL(@SKU, '') = '' --this work faster or
IF @SKU IS NULL OR @SKU = '' --this work faster
BEGIN
SELECT OrderNo, SKU, ISNULL(Quantity, 0) Quantity, ISNULL(Amount, 0) Amount
FROM StoreRefundOrder SRO
INNER JOIN StoreRefundOrderItem SROI ON SRO.ID = SROI.RefundOrderID
WHERE SRO.OrderNo = @OrderNo
AND ProfileID = @ProfileID
END
ELSE
BEGIN
SELECT OrderNo, SKU, ISNULL(SUM(Quantity), 0) Quantity, ISNULL(SUM(Amount), 0) Amount
FROM StoreRefundOrder SRO
INNER JOIN StoreRefundOrderItem SROI ON SRO.ID = SROI.RefundOrderID
WHERE SRO.OrderNo = @OrderNo
AND SROI.SKU = @SKU
AND ProfileID = @ProfileID
GROUP BY OrderNo, SKU
END
END
【问题讨论】:
-
即使在性能上有任何不同,我怀疑它是否重要
-
@DaleK,你说得对,我只是想念它。谢谢
-
在数据库性能的伟大计划中,这是一个微不足道的情况,不值得花任何时间。您会遇到影响更大的问题。
-
作为一个例子,它建议总是为你的对象添加模式前言,例如而不是
FROM StoreRefundOrder SRO使用FROM dbo.StoreRefundOrder SRO(假设您的方案是dbo)。 -
你有没有用实际的执行计划开始你的分析,以确保你没有参与premature optimization?你知道瓶颈在哪里吗? (见performance rant。)
标签: sql-server performance tsql stored-procedures