2015-10-10 121 views
0

試圖瞭解EXPLAIN功能 - 我有兩個疑問 - 第一個查詢優化,運行600毫秒(我有10萬行)和第二查詢正在運行900毫秒 但是當我運行EXPLAIN ANALYZE - 第一個查詢,即快速運行,顯示成本 - 64296,第二個查詢,即運行速度慢,顯示成本 - 20873 無法理解爲什麼更快的查詢成本更高,以及爲什麼運行時間更長的查詢成本更低。 有人可以給我一些提示嗎?瞭解EXPLAIN功能在PostgreSQL

+1

可能是因爲優化器感到困惑,併爲第二個查詢選擇了錯誤的執行計劃。 –

回答

0

PostgreSQL EXPLAIN是一種真正擁有大量武器的動物腿,每一條腿都可能導致其起初不易理解的方式工作。

要回答你的問題,據我瞭解,雖然運行第一個查詢Q1(而不是它EXPLAIN),它的運行速度比第二(Q2)更快,但是當你做一個EXPLAIN ANALYSE,Q1實際上具有較高的性價比。

我能想到的,都在這一刻我想起兩個原因:

  • 如果查詢是LIMIT查詢,其可能的Q1執行速度更快,而且還有較高的「成本」,因爲PostgreSQL規劃(有意)並不計劃較小的總成本,而是所需結果的較小成本(在這種情況下,行數較少)。
  • 另一個原因可能是緩存可能會破壞你的時代。你能否確認觀察是否持續多次(3+)運行?

除了這些預感,如果你真的想深入瞭解EXPLAIN,建議您參考以下文章hereherehere

0

成本就是計劃者認爲執行查詢需要多少資源(I/O和CPU時間)。這只是一個估算,通過數學模型計算。

在你的案件策劃師錯了,它選擇了不理想的計劃。它有時會發生。

爲什麼?可能有很多原因。也許統計數據不足(首先嚐試運行analyze)。也許統計數據是可以的,但規劃人員使用錯誤的模型(例如,您可能在查詢中存在已知有問題的相關謂詞)。也許你的查詢是在幾十張桌子上,規劃者不能完成所有可能的計劃。等等。