2017-10-13 130 views
-2

假設我有一個自連接查詢,其結果對於內連接的結果與外連接的結果完全相同。在這種情況下,是否比另一個更具性能,還是因查詢優化器的作用而異?哪個查詢更高效?

通常我會期望LOJ的性能較差,因爲它必須完成INNER JOIN的所有工作以及對結果進行空值擴展的額外工作。但如果不需要額外的工作,理論上的表現應該如何?我自己嘗試過,但沒有注意到任何一致的性能差異,但是想在這裏問一下確定。

+1

你可以在花時間測試它。 – Strawberry

回答

2

回答您的問題的正確方法是對您的系統上的數據運行查詢。

通常,外連接的效果只是簡化優化器可以做出的選擇。如果是這種情況,則可以使用基本相同的查詢計劃 - 並且查詢是相同的

當然,效果可能更戲劇化。結果查詢計劃可能會更加糟糕,外連接。

0

什麼理論?符號理論對於性能沒有任何可說的。對於某些假設實現的「理論」取決於該假設實現,其大致可以分爲顯式(索引)&隱式(其他)物理(實現)方面的邏輯(查詢重寫)&。實際情況由實際實施的那些方面(保證或其他方面)粗略地指導。最終我們必須測量估計的/典型的/實際的負載數據 - 性能是混亂的,情況的一個小的變化會導致結果的巨大變化。

整個事情是沒有實際意義,雖然,因爲如果你聲明&你知道內&外連接相同的約束,則DBMS極有可能也知道,如果沒有,那麼極有可能做的工作相同數量的反正。

此外,與實際完成的工作相比,所涉及的差異將是微不足道的。整本書都在等待重新優化,特別是針對DBMS。

提供論據支持以下猜想:
•如果n> = 10,初始化一個矩陣所需要的時間不是很重要
•如果n < 10,所需的時間來初始化矩陣不是很重要
- 第1章(介紹),重點第1條,「清楚地寫 - 不要太聰明」,經典,Kernihan的編程風格元素& Plauger(1974)