


回到正题,上一讲中我们留了个悬念:在 SQL Join 查询里,把筛选条件写在 WHERE 还是 ON 里,哪个速度更快?
对于数据库开发者来说,这是个经典话题。要公平地衡量两者的执行性能,我们需要设定一些前提假设,避免因为索引使用不当或函数表达式干扰而得出错误结论。
比如参考之前的例子:
SELECT Header.OrderId , Detail.ProductName , Detail.Amount FROM tblOrderHeader Header LEFT JOIN tblOrderDetail Detail ON Header.OrderId = Detail.OrderId AND Detail.Amount > 1000 WHERE Header.OrderDate > '2020-01-01'
为了逻辑严谨,我们先讨论 INNER JOIN 的情况。在这种模式下,将筛选表达式放在 WHERE 和 ON 中的功能本质是类似的。我们将上述示例改为 INNER JOIN:
SELECT Header.OrderId , Detail.ProductName , Detail.Amount FROM tblOrderHeader Header INNER JOIN tblOrderDetail Detail ON Header.OrderId = Detail.OrderId AND Detail.Amount > 1000 WHERE Header.OrderDate > '2020-01-01'
此时,比较 Detail.Amount > 1000 放在 WHERE 中的情况:
Header.OrderId , Detail.ProductName , Detail.Amount tblOrderHeader Header tblOrderDetail Detail Header.OrderId Detail.OrderId Header.OrderDate Detail.Amount


