ANALYZE
ANALYZE — 收集有關資料庫的統計資訊
語法
說明
ANALYZE 收集有關資料庫中資料表內容的統計資訊,並將結果儲在在 pg_statistic 系統目錄中。然後,查詢計劃程序會使用這些統計資訊來幫助決定查詢的最有效執行計劃。
如果沒有參數,ANALYZE 會檢查目前資料庫中的每個資料表。使用參數時,ANALYZE 僅檢查該資料表。還可以輸出欄位名稱列表,在這種情況下,僅收集這些欄位的統計資訊。
參數
VERBOSE
啟用進度訊息的顯示。
table_name
要分析的特定資料表的名稱(可以加入綱要名稱)。如果省略,則分析目前資料庫中的所有一般資料表,分割資料表和具體化檢視表(但不包括外部資料表)。如果指定的資料表是分割資料表,則更新分割資料表的繼承統計資訊和各個分割區的統計資訊。
column_name
要分析特定欄位的名稱。預設為所有欄位。
輸出
指定 VERBOSE 時,ANALYZE 會輸出進度訊息以顯示目前正在處理哪個資料表。還會列出有關資料表的各種統計資訊。
注意
僅在明確選擇時才會分析外部資料表。並非所有外部資料封裝器都支援 ANALYZE。如果資料表的封裝器不支援 ANALYZE,則該命令只會輸出警告並且不執行任何操作。
ANALYZE 只需要對目標資料表執行讀取鎖定,因此它可以與資料表上的其他活動同時運行。
被分析欄位中最大的統計目標決定了為準備統計訊息而採樣的資料列數。增加目標會使得進行 ANALYZE 所需的時間和空間成比例增加。
如果正在分析的資料表有一個或多個子資料表,ANALYZE 將收集兩次統計訊息:一次僅在父資料表的資料列上,第二次在父資料表的資料列上及其所有子資料表。在規劃遍歷整個繼承樹的查詢時,需要第二組統計訊息。 但是,autovacuum 背景程序在決定是否觸發對該資料表的自動分析時,只會考慮父資料表本身的插入或更新。如果很少插入或更新該資料表,則除非您手動運行 ANALYZE,否則繼承統計訊息將不是最新的。
如果任何子資料表是外部資料封裝器不支援 ANALYZE 的外部資料表,則在收集繼承統計訊息時將忽略這些子資料表。
如果要分析的資料表完全為空,ANALYZE 將不會記錄該資料表的新統計訊息。任何現有統計資訊都會被保留。
相容性
SQL 標準中沒有 ANALYZE 語句。
參閱
Last updated
Was this helpful?