我有一個查詢,運行很慢(~5分鐘),當我用默認的enable_nestloop = true和enable_nestloop = false(〜10秒)運行它時。Postgresql - 使用enable_nestloop = false,查詢運行速度更快。爲什麼規劃師不能做正確的事情?
解釋爲這兩種情況下分析結果:
機器A nestloop =真 - http://explain.depesz.com/s/nkj0(〜5分鐘) 機器A nestloop =假 - http://explain.depesz.com/s/wBM(〜10秒)
在一個不同的速度稍慢機,複製數據庫並保留默認的enable_nestloop = true需要20秒。
機器B nestloop =真 - (〜20secs)
上述所有我的情況下,確保我沒有運行查詢之前的分析一下。沒有其他查詢並行運行。
兩臺機器都運行Postgres 8.4。機器A運行Ubuntu 10.04 32位,而機器B運行Ubuntu 8.04 32位。
實際查詢可在此處獲得。由於數據庫主要用於事務處理,因此它是具有多個聯接的報告查詢。
沒有求助於投入像物化視圖我能做些什麼,使規劃師做我設置ENABLE_NESTLOOP =假的實現?
從我所做的研究看來,計劃者選擇看似不理想的查詢的原因是由於估計行和實際行之間的巨大差異。我怎樣才能讓這個數字更接近?
如果我應該重寫查詢,我應該改變什麼?
爲什麼規劃師似乎在爲機器B做正確的事情。我應該在兩臺機器中進行比較?
上述問題的鏈接必須刪除 - 查詢 - http://pastie.org/2754424 – Mohan
解釋分析機B - http://explain.depesz.com/s/dYO – Mohan