Q
SQL加入差異
41
A
回答
78
0
希望你明白的圖片。在性能方面,它們是相同的 - 沒有區別。
編輯:哎呀。猜猜你並不在意答案的這一部分。
3
A LEFT JOIN B
與B RIGHT JOIN A
相同。有些RDBMS沒有RIGHT JOIN
,所以你有你的RIGHT JOIN
邏輯改寫爲LEFT JOIN
邏輯
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
。這與左側的A相同。
無論左邊是什麼,總是被評估,總是有輸出。你能想象一個LEFT JOIN B,B RIGHT加入爲:
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" ));
}
4
性能comparisions類型之間的連接是無關緊要的,因爲他們給不同的充結果集。即使內部連接速度更快,如果您需要左連接的結果(甚至包括與連接中的第二個表不匹配的記錄),也是如此。
3
左側,右側,內側和外側不影響性能,已經在這裏很好地解釋了它們。
但是有些提示可以添加到影響性能的連接中:散列,循環和合並。
查詢計劃員通常會決定執行哪些操作,但偶爾可以通過覆蓋它來提高性能。
甲loop
join
經過在第二表中的每一行中所述第一每一行。如果你有一個非常大的桌子和一個非常小的桌子,這很好。
A merge
join
按順序經過兩個表。如果兩個表已經按照您加入的字段排序,那麼可以非常快速。
甲hash
join
使用大量的臨時表的分組的輸出,因爲它通過排序接合數據。
一些專家DB還支持其他類型,比如位圖連接。
相關問題
- 1. 差異加入
- 2. 差異加入
- 3. 差異加入
- 4. MySQL加入性能差異
- 5. SQL乘差異
- 6. SQL與差異
- 7. 差異加盟,其中選擇加入SQL語句
- 8. 加入SQL的時間差
- 9. SQL異常加入
- 10. 差異獲取值不在內部加入差異
- 11. SQL日期差異
- 12. SQL查詢優化 - 自然分配律加入和差異
- 13. 加入表格時SQL結果的差異
- 14. 差異INNER JOIN和笛卡爾在SQL Server中加入
- 15. T-SQL - 在單個表中找到PK的差異(自加入?)
- 16. 查詢性能差異pl/sql插入和純SQL插入
- 17. 加入表格時的性能差異
- 18. 加入三個差異列多表
- 19. 差異和追加
- 20. 日期差異MS SQL
- 21. SQL時間戳差異
- 22. SQL中的日期差異
- 23. 與SQL Server差異更新
- 24. SQL Server中的天差異
- 25. 差異是PHP \ SQL返回
- 26. 列SQL Server大小差異
- 27. SQL差異/排序錯誤
- 28. T-SQL找到差異
- 29. 排序日期差異SQL
- 30. SQL:行之間的差異
問題的第二部分是關於性能,這不一定與連接方法直接相關,您是否有任何進一步的評論呢? – 2009-01-07 07:23:28
請務必閱讀文章中的所有評論,因爲其作爲集合操作的連接呈現非常受批評!例如,左連接不是交集,因爲它創建了新的元組。 – bortzmeyer 2009-01-07 09:53:13