SQL Join Differences
内部连接和外部连接(左连接、右连接)有什么区别,哪一个性能最好?
谢谢!
检查这一条:
视觉解释SQL联接。
内部连接:
左外连接:
右外部联接。
类型的性能之间的连接是comparisions失去他们给不同的结果集。即使你是一个更快的内部连接也不会使用它,如果你需要的结果(包括左连接的记录,即使它不匹配,第二个表中的联接)。
左,右,内和外的影响表现不好,他们解释说,这里已经有一个。
然而,你可以有提示添加到哈希联接的效果,这表现为:回路和合并。
通常情况下,这些查询计划是对的,但偶尔的,你可以用它overriding提高性能。
在每一行中都
这两个表都
通过使用大量的临时表
一些专家也支持其他类型的数据库,如位图联接。
在
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,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" )); } |
我希望你的图片。性能明智的,他们是等效的差。
编辑:哎呀。。。。。。。想你不在乎那部分的答案。