SQL加入差异

SQL Join Differences

内部连接和外部连接(左连接、右连接)有什么区别,哪一个性能最好?

谢谢!


检查这一条:

视觉解释SQL联接。

内部连接:

左外连接:

右外部联接。


类型的性能之间的连接是comparisions失去他们给不同的结果集。即使你是一个更快的内部连接也不会使用它,如果你需要的结果(包括左连接的记录,即使它不匹配,第二个表中的联接)。


左,右,内和外的影响表现不好,他们解释说,这里已经有一个。

然而,你可以有提示添加到哈希联接的效果,这表现为:回路和合并。

通常情况下,这些查询计划是对的,但偶尔的,你可以用它overriding提高性能。

在每一行中都loopjoin通,第二个表中的每行的第一个。这是一个很好的,如果你有一个非常大的表和一个非常小的。

这两个表都mergejoin为了共同的通。它可以是非常快速的,如果这两个表是有序的领域你已经重新加入网络。

通过使用大量的临时表hashjoin组输出:通过加入它的日期。

一些专家也支持其他类型的数据库,如位图联接。


LEFT JOIN BB RIGHT JOIN A是相同的。Don’t有一个关系数据库管理系统(RDBMS)RIGHT JOIN消失,所以你要重写你的RIGHT JOINLEFT JOIN逻辑到逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
A 1 2 3
B 2 3 4 3

SELECT A.I FROM INNER JOIN B ON B.I = A.I;

output: 2 3, 3

SELECT A.I AS X, B.I AS Y FROM A LEFT JOIN B ON B.I = A.I;

READ above code AS A ON LEFT, JOINs B

output:

X Y
1 NULL
2 2
3 3
3 3

SELECT A.I AS X, B.I AS Y FROM B RIGHT JOIN A ON A.I = B.I;

上述B on RIGHT, JOINs A读取的代码。这是相同的,只是左是在线

无论是在线评估是左,是永远,永远有一个输出。你可以想象的左,右连接B,B的连接:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
        var RESULT = NEW Dictionary<INT, INT?>();

        var A = NEW INT[] { 1, 2, 3 };
        var B = NEW INT[] { 2, 3, 4, 3 };

        foreach (INT aElem IN A)
        {


            bool hasMatch = FALSE;
            foreach (INT bElem IN B)
            {
                IF (bElem == aElem)
                {
                    RESULT.Add(aElem, bElem);
                    hasMatch = TRUE;
                }
            }

            IF (!hasMatch)
                RESULT.Add(aElem, NULL);
        }



        foreach(INT X IN RESULT.Keys)
        {
            MessageBox.Show(string.Format("X {0} Y {1}", X, RESULT[X].HasValue ? RESULT[X].Value.ToString() :"NULL"  ));
        }

我希望你的图片。性能明智的,他们是等效的差。

编辑:哎呀。。。。。。。想你不在乎那部分的答案。