嵌套的sql连接需要进程解释

时间:2010-01-07 08:34:06

标签: sql sql-server join

我想了解sql查询中嵌套连接子句的过程。你能用伪代码解释这个例子吗? (连接表的顺序是什么?)

  FROM 
table1 AS t1 (nolock)
    INNER JOIN table2 AS t2 (nolock)
        INNER JOIN table3 as t3 (nolock)
        ON t2.id = t3.id
    ON t1.mainId = t2.mainId

3 个答案:

答案 0 :(得分:2)

在SQl中,基本上我们有3种方法可以连接两个表。

嵌套循环(如果一个表的行数很少,则很好), 散列连接(如果两个表都有非常大的行,那么它很好,它会在内存中形成昂贵的散列) 合并加入(当我们对要加入的数据进行排序时很好)。

从您的问题看来,您似乎想要嵌套循环。

让我们说t1有20行,t2有500行。

现在就像

对于t1中的每一行    在t2中查找t1.MainId = t2.MainId

的行

现在将把它加入t3。

加入顺序取决于优化程序,预期行数等。

答案 1 :(得分:1)

尝试EXPLAIN query

它准确地告诉你发生了什么。 :)

当然,这在SQL Server中不起作用。为此,您可以尝试Razor SQLServer Explain Plan

甚至是SET SHOWPLAN_ALL

答案 2 :(得分:1)

如果您使用的是SQL Server查询分析器,请在“查询”菜单下查找“显示Execution Plan”,然后启用它。