資料庫之查詢最佳化

spasvo發表於2016-10-28

  (1) 來自pg文件
  PostgreSQL使用的是基於成本的最佳化器(Cost based optimizer)。理論上基於成本的最佳化器會計算使用者輸入的查詢語句的每個合法的查詢計劃的執行成本,然後從中選擇成本最小的計劃作為執行查詢語句的 最終計劃。在實際應用中,查詢語句的合法的計劃的個數是隨查詢複雜度的增加呈指數增長的。對於過於複雜的查詢,如果遍歷每個合法的查詢計劃,將會消耗 掉大量的時間,這是不能被使用者接受的,所以最佳化器不會遍歷每個合法的查詢計劃,只會選擇一部分查詢計劃,從中找到執行成本最小的計劃。
  (2)調整QL查詢計劃
  在oracle中使用hint可以調整SQL的,
  在postgresql可以使用如下的方法進行調整
  使用set to off/on;調整查詢計劃,引數如下:

enable_seqscan是否走全表掃描

enable_hashjoin是否允許走hash連線

enable_nestloop是否允許走nestloop連線

enable_mergejoin是否允許走合併連線

enable_tidscan是否允許走tid掃描(類似oracle中的按rowid訪問)

enable_bitmapscan是否允許走bitmap掃描

enable_hashagg是否允許走hash聚集(也就是做group by時)

enable_indexscan是否允許走索引

enable_sort是否允許走排序

constraint_exclusion是否允許走分割槽

本文轉自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29379530/viewspace-2127286/,如需轉載,請註明出處,否則將追究法律責任。

相關文章