Execution-Plan

比較執行計劃

  • March 11, 2014

優化器如何比較同一查詢的不同執行計劃?假設我們有兩個複雜且結構不同的執行計劃,我怎麼知道它們是否提供相同的結果?

優化器的任務是創建多個執行計劃並比較它們(通常按成本)。每個執行計劃都可以看作是邏輯轉換。

例如:一個簡單的連接總是兩個表的笛卡爾積。第一行的每一行都被讀取並與另一個表中的每一行合併。然後檢查連接條件並使用或丟棄結果行。

那將是我們沒有優化器的生活。優化器使用集合論和布爾代數對其進行轉換。每次轉換都會導致相同的結果。例如,如果您首先對兩個集合進行獨立排序然後將它們加入,或者首先將它們加入並將它們排序為一個集合,那麼 tt 並不重要。

其他優化是獲取或比較行的方式。例如,有許多連接算法,如嵌套循環連接、雜湊連接或排序合併連接。每種算法都有不同的優點和缺點。但是它們對相同的數據進行操作。執行計劃可能導致其他結果的唯一(假設)方式是儲存的行和索引的差異。因此,索引必須始終在插入/更新/刪除行時更新。

引用自:https://dba.stackexchange.com/questions/60650