2014-08-28 157 views
1

我知道這已被問過很多次,但沒有一個有明確的答案。Oracle執行計劃:成本與實際問題:成本較高的查詢運行得更快

Here

Here

在我的情況,我的DBA優化了選擇查詢其需要大約1.05分鐘來執行。我在1秒內完成了進一步的改進。但是我執行計劃中我優化的那個成本更高。我的數據庫管理員建議,因爲我的查詢是昂貴的,我們不應該改變查詢。

我知道兩個查詢的執行計劃是不可比較的。但是我應該如何說服我的DBA理解執行計劃是一個「計劃」,但結果是「實際」

任何人都可以點我在正確的方向

+1

您的數據庫管理員也應該知道,比較成本只對同一查詢的不同計劃有意義,而不適用於不同的查詢,即使它們最終具有相同的結果集。而[成本沒有度量單位](http://docs.oracle.com/cd/E25054_01/server.1111/e16638/ex_plan.htm#i18300)。 – 2014-08-28 11:30:45

+0

@AlexPoole是的,我想他應該知道。但是,有什麼結果呢,我可以用來解決他的觀點的文檔 – 2014-08-28 14:21:23

+1

經常這樣[從Tom Kyte開始](https://asktom.oracle.com/pls/asktom/f?p=100:11:0: ::: P11_QUESTION_ID:313416745628)。但也要確保你不僅僅看到第一個查詢緩存了第二個查詢所使用的數據的好處;同時運行多次並交錯檢查時間是否一致。 – 2014-08-28 14:24:00

回答

2

由於Tom Kyte says

你不能比較2個查詢的成本與彼此的成本。他們根本不是 可比。

...

如果我們得到另一個查詢 - 另一個類似的查詢 - 我們經歷了同樣的步驟,建立 很多計劃,分配成本,挑一個與該組最低的成本。

我們卻無法把這些2個查詢和比較每個到 其他的相對成本。這些成本僅針對這些查詢。

許多事情都會影響查詢的「成本」。 「成本」僅僅是我們在給定特定環境時選擇查詢的一些人造數字 。 ...

不要比較它們,你不能 - 它們可能是隨機數。

DBA應該已經知道,任何人都應該嘗試調整查詢(並且您在問題中說過)。他們也應該知道相信湯姆的觀點。

1

計算的成本是過去統計的結果,也取決於配置。例如,如果您設置了optimizer_index_cost_adj,那麼它會影響成本,但不會影響執行查詢所需的實際時間。而第二個老年人的統計數據已經是第二個老年人了,而且不再是100%準確的。

在另一方面,當你衡量查詢的執行時間,則測量時間取決於你的緩存命中率。你當然可以在每次查詢之前刷新所有的緩存,但這並不像現場情況。所以當你聲稱你的陳述需要1.00秒而不是1.05時要小心。因爲你可能只是在你的實驗室做實驗,這不是你的現實。