(1) 來自pg文檔
PostgreSQL使用的是基於成本的優化器(Cost based optimizer)。理論上基於成本的優化器會計算用戶輸入的查詢語句的每一個合法的查詢計劃的執行成本,而後從中選擇成本最小的計劃做爲執行查詢語句的 最終計劃。在實際應用中,查詢語句的合法的查詢計劃的個數是隨查詢複雜度的增長呈指數增加的。對於過於複雜的查詢,若是遍歷每一個合法的查詢計劃,將會消耗 掉大量的時間,這是不能被用戶接受的,因此優化器不會遍歷每一個合法的查詢計劃,只會選擇一部分查詢計劃,從中找到執行成本最小的計劃。
(2)調整QL查詢計劃
在oracle中使用hint能夠調整SQL的執行計劃,
在postgresql能夠使用以下的方法進行調整
使用set<option> to off/on;調整查詢計劃,參數以下:html
enable_seqscan是否走全表掃描sql
enable_hashjoin是否容許走hash鏈接oracle
enable_nestloop是否容許走nestloop鏈接oop
enable_mergejoin是否容許走合併鏈接post
enable_tidscan是否容許走tid掃描(相似oracle中的按rowid訪問)優化
enable_bitmapscan是否容許走bitmap掃描spa
enable_hashagg是否容許走hash彙集(也就是作group by時)postgresql
enable_indexscan是否容許走索引htm
enable_sort是否容許走排序排序
constraint_exclusion是否容許走分區