MathJax

MathJax-2

MathJax-3

Google Code Prettify

置頂入手筆記

EnterproseDB Quickstart — 快速入門筆記

由於考慮採用 EnterpriseDB 或是直接用 PostgreSQL 的人,通常需要一些入手的資料。這邊紀錄便提供相關快速上手的簡單筆記 ~ 這篇筆記以 資料庫安裝完畢後的快速使用 為目標,基本紀錄登入使用的範例:

2016年8月22日 星期一

EDB 功能 - Optimizer Hints

在 PostgreSQL 中要影響執行計畫,就是透過 PostgreSQL 的 GUC 參數,對 Query Planner 選用執行計畫優先順序影響。

而 PostgreSQL 企業版則提供直接影響 Query Plan 的工具 — Optimizer hints,能夠以用 Oracle 的 Optimizer Hints 工具的使用方式,去影響 Postgres Query Planner 的行為。

Optimizer hints 將 Postgres 裡面的可行的設置方式,對照成 「Oracle-Style」 的 Optimizer Hint,直接對執行計畫進行動作的開關。如果 Query Planner 對於所指令的 Hint 找不到符合的執行計畫,這個 Hint 就會被忽略。

由於 Hint 是包在註解中的,於是如果 Hint 沒有被理會,也不會跳出任何錯誤的。

使用方式,是採用多行註解進行 Hint 的指定,適用於 SELECT、INSERT、UPDATE、DELETE 等 SQL 指令:
SELECT
/*+
放置 Hint 內容
*/
col_list FROM tbl;

以下利用企業版內建範例表格 emp,作一個簡單示範:
edb=# explain SELECT /*+ FIRST_ROWS(1) */ * FROM emp ORDER BY empno;               
                            QUERY PLAN                            
---------------------------------------------------------------------
 Index Scan using emp_pk on emp  (cost=0.14..10.85 rows=14 width=45)
(1 row)

edb=# explain SELECT /*+ FULL(emp) */ * FROM emp ORDER BY empno;
                       QUERY PLAN                       
-----------------------------------------------------------
 Sort  (cost=1.41..1.44 rows=14 width=45)
   Sort Key: empno
   ->  Seq Scan on emp  (cost=0.00..1.14 rows=14 width=45)
(3 rows)

根據使用手冊,目前 9.5 企業版可以指定與 Oracle Optimizer Hint 相容的的有:
類型
Hint
Row Number Correction
CHOOSE
ALL_ROWS
FIRST_ROWS
FIRST_ROWS_10
FIRST_ROWS_100
FIRST_ROWS_1000
FIRST_ROWS(數量)
Scan Method
FULL(表格名稱)
INDEX(表格名稱 INDEX名稱)
NO_INDEX(表格名稱 INDEX名稱)
Join Method
USE_HASH(表格名稱)
NO_USE_HASH(表格名稱)
USE_MERGE(表格名稱)
NO_USE_MERGE(表格名稱)
USE_NL(表格名稱)
NO_USE_NL(表格名稱)
Join Order
ORDERED


最後,社群也有針對 postgreSQL 開發出 Hint 套件,稱為 pg_hint_plan。不過該套件和 EDB 企業版內建的 Optimizer Hints 相比較,企業版仍然想辦法對應 Oracle 提供的 Hints 種類為主;而 pg_hint_plan 則是以 postgresql.conf 設定檔內的 Planner Method Configuration 小節對應的 Planner Methode 為主(詳見 Hint 支援清單),對於 Oracle 習慣用戶來說,還是從 Postgres 企業版比較親切一些。

參考

Postgres Query Optimizer 基本觀念:Hinting at PostgreSQL | Blog - 2ndQuadrant



其他資料:


社群版相似工具: pg_hint_plan
相關資料:

沒有留言:

張貼留言