2
SQL Server联接/位置处理顺序
在阅读了慢速SQL查询之后,不确定如何优化,这让我开始思考查询的一般性能。当然,我们需要将第一个表(在连接其他表时)的结果尽可能小,然后再进行连接(此问题的内部连接),以使我们的查询快一点。 示例,应该这样: SELECT * FROM ( SELECT * FROM table1 WHERE col = @val ) t INNER JOIN table2 ON col = col2 比以下更好/更快: SELECT * FROM table1 INNER JOIN table2 ON col = col2 WHERE table1.col = @val 我的理论如下(这可能不是正确的实现,我试图从我读过的一本SQL Server 2008内部书籍(MSFT Press)中记住): 查询处理器首先获取左表(表1) 在过滤掉必要的行之前,连接第二个表(表2)并形成笛卡尔积(如果适用) 然后使用SEELCT语句最后执行WHERE,ORDER BY,GROUP BY,HAVING子句。 因此,如果在上面的语句1中表较小,则在形成笛卡尔积时SQL引擎要做的工作较少。然后,当您到达where语句时,您将得到减少的结果集,可以从中筛选出结果集。 我可能还差得远,这是不真实的。就像我说的,这是一种理论。 …