了解 EXPLAIN 陳述式
使用 EXPLAIN 語句來顯示查詢的執行計劃。 EXPLAIN 可以搭配任何 SELECT、INSERT、UPDATE、DELETE、VALUES、EXECUTE、DECLARE 或 CREATE TABLE AS 語句使用。
EXPLAIN 會顯示查詢的執行計劃,讓您瞭解 PostgreSQL:如何執行語句、是否使用索引、數據表聯結方式,以及查詢的指標成本。
EXPLAIN 的語法如下:
EXPLAIN [ (parameter [, ...] ) ] statement
選擇性參數為:
- ANALYZE
- VERBOSE
- 成本
- 緩衝區
- 格式
例如:
EXPLAIN ANALYZE SELECT * FROM category ORDER BY cat_id;
這個簡單的查詢會傳回下列資訊:
ANALYZE
此選項會執行語句,並傳回查詢計劃。 語句的輸出會被捨棄,但語句仍會執行。 您可以使用對資料庫進行變更的查詢 (例如 INSERT、UPDATE 或 DELETE),結合 ROLLBACK 與 EXPLAIN ANALYZE 陳述式來防止套用變更。 例如:
BEGIN;
> EXPLAIN ANALYZE INSERT INTO Animal
> (ani_id, name, weight_kg, cat_id, enc_id)
> VALUES (28, 'Robin Robin', 0.5, 1, 2);
ROLLBACK;
VERBOSE
顯示其他資訊,包括:
- 計畫樹中每個節點的輸出欄位清單
- 結構描述限定資料表和函式名稱
- 表達式中的變數名稱與數據表別名
- 顯示統計資料的每個觸發條件名稱
成本
包含預估的啟動成本、總成本,預估的行數,以及每個行的估計寬度。
緩衝區
緩衝區只能與 ANALYZE 選項搭配使用。 PostgreSQL 會使用最近最少使用(LRU)的快取,將常用資料儲存在記憶體中。 緩衝區會顯示有多少數據來自快取,以及從磁碟擷取多少數據。 顯示共用、本地和暫存區塊的命中次數、讀取次數及寫入次數。 BUFFERS 所提供的數據有助於了解查詢的 I/O 密集部分。
格式
定義輸出格式。 XML、JSON 或 YAML 包含與 TEXT 相同的資訊,但格式較容易讓程式使用。 TEXT 是預設值。