在T-SQL中假设一个查询。SQL连接和排除
SELECT *
FROM Stock S
LEFT JOIN StockBarcode SB ON SB.StockID = S.StockID
AND SB.ShopID = @ShopID
AND SB.Inactive = 0
LEFT JOIN StockBarcode SB1 ON SB1.StockID = S.StockID
AND SB1.ShopID = 0
AND SB1.Inactive = 0
WHERE S.StockID = @StockID
我的理解是,我可以重写查询,这样
SELECT *
FROM Stock S
LEFT JOIN StockBarcode SB ON S.StockID = SB.StockID
AND SB.ShopID = @ShopID
LEFT JOIN StockBarcode SB1 ON S.StockID = SB1.StockID
AND SB1.ShopID = 0
WHERE S.StockID = @StockID
AND ISNULL(SB.Inactive, 0) = 0
AND ISNULL(SB1.Inactive, 0) = 0
...,其结果将是相同的。 (如果我错了,请纠正我) 哪个是最佳查询,为什么?如果我使用另一个数据库引擎如MySql,情况会不同吗?
在此先感谢任何答案:-)
编辑: 为了说明这里是整个查询,因为它代表的那一刻,如果这将有助于。
SELECT
SSCLRU.SupplierCode,
S.[Description],
S.TaxRate AS GSTRate,
ISNULL(ISNULL(SB.PackPrice, SB1.PackPrice), S.RRP) AS Price,
ISNULL(SB.PackSize, SB1.PackSize) AS Quantity,
ISNULL(SB.SalePrice, SB1.SalePrice) AS SalePrice,
ISNULL(SB.SaleDateFrom, SB1.SaleDateFrom) AS SalePriceStartDate,
ISNULL(SB.SaleDateTo, SB1.SaleDateTo) AS SalePriceEndDate
FROM Stock S
LEFT JOIN StockSupplierCodePreferredLastReceivedUnique SSCLRU ON
S.StockID = SSCLRU.StockID
LEFT JOIN StockBarcode SB ON
S.StockID = SB.StockID AND
SB.ShopID = @ShopID AND
SB.Inactive = 0
LEFT JOIN StockBarcode SB1 ON
S.StockID = SB1.StockID AND
SB1.ShopID = 0 AND
SB1.Inactive = 0
WHERE S.StockID = @StockID
第一个看起来会快一点,但是如果你想要真正的统计数据......看一下剖析器跟踪和执行计划 – 2010-11-03 06:33:49