本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
更新資料表統計資訊以供查詢規劃器使用。
所需權限
以下是 ANALYZE 所需的權限:
-
超級使用者
-
具有 ANALYZE 權限的使用者
-
關係的擁有者
-
共用資料表的資料庫擁有者
語法
ANALYZE [ VERBOSE ] [ [ table_name [ ( column_name [, ...] ) ] ] [ PREDICATE COLUMNS | ALL COLUMNS ]
參數
- 詳細
-
此子句會傳回有關 ANALYZE 操作的進度資訊訊息。若您不指定資料表,此選項會很實用。
- table_name
-
您可以分析特定資料表,包括臨時資料表。您可以利用結構描述名稱限定資料表。您可以選擇性的指定 table_name 來分析單一資料表。您無法在單一 ANALYZE table_name 陳述式中指定多個 table_name。如果您未指定 table_name 值,則目前連接的資料庫中所有資料表都會加以分析,包括系統目錄中的永久性資料表。如果自上次 ANALYZE 之後變更的資料列百分比低於分析閾值,Amazon Redshift 會略過分析資料表。如需詳細資訊,請參閱分析閾值。
您不需要分析 Amazon Redshift 系統資料表 (STL 和 STV 資料表)。
- column_name
-
若您指定 table_name,則您也可以在資料表中指定一個或多個資料欄 (括號內以資料欄分隔的清單)。若指定了資料欄清單,則只會分析列出的資料欄。
- PREDICATE COLUMNS | ALL COLUMNS
-
這些子句會指出,ANALYZE 是否應該只包含述詞資料欄。指定 PREDICATE COLUMNS 時,只會分析已在先前查詢中做為述詞使用的資料欄,或可能做為述詞使用的候選資料欄。指定 ALL COLUMNS 則會分析所有資料欄。預設值是 ALL COLUMNS。
若下列任一條件為真,表示資料欄包含在一組述詞資料欄中:
-
資料欄已在查詢中做為篩選的一部分、聯結條件或 group by 子句使用。
-
資料欄是分佈索引鍵。
-
資料欄是排序索引鍵的一部分。
如果資料表尚未經過查詢,因而未將任何資料欄標示為述詞資料欄,則即使指定了 PREDICATE COLUMNS,仍會分析所有資料欄。發生這種情況時,Amazon Redshift 可能會回應一則訊息,例如
"
。如需述詞資料欄的相關資訊,請參閱 分析資料表。table-name
" 找不到述詞資料欄。分析所有資料欄 -
使用須知
Amazon Redshift 會在您使用下列命令建立的資料表上自動執行 ANALYZE:
-
CREATE TABLE AS
-
CREATE TEMP TABLE AS
-
SELECT INTO
您無法分析外部資料表。
您不需要在初次建立這些資料表時,對其執行 ANALYZE 命令。若您修改這些資料表,則應依照與其他資料表相同的方式進行分析。
分析閾值
為了減少處理時間並提高整體系統效能,如果自上次執行 ANALYZE 命令後變更的資料列百分比低於 analyze_threshold_percent 參數指定的分析閾值,則 Amazon Redshift 會略過資料表的 ANALYZE 操作。analyze_threshold_percent
預設為 10。若要變更目前工作階段的 analyze_threshold_percent
,請執行 SET 命令。下列範例會將 analyze_threshold_percent
變更為 20%。
set analyze_threshold_percent to 20;
若要在只有少量資料列變更時分析資料表,請將 analyze_threshold_percent
設定為任何更小的數。例如,如果將analyze_threshold_percent
設為 0.01,則 100,000,000 資料列的資料表中變更的資料列大於 10,000 列資料時,便不會略過資料表。
set analyze_threshold_percent to 0.01;
若 ANALYZE 因為不符合分析閾值而略過資料表,Amazon Redshift 會傳回以下訊息。
ANALYZE SKIP
若要分析所有資料表,即使沒有任何資料列變更,請將 analyze_threshold_percent
設為 0。
若要檢視 ANALYZE 操作的結果,請查詢 STL_ANALYZE 系統資料表。
如需分析資料表的相關資訊,請參閱 分析資料表。
範例
分析 TICKIT 資料庫中的所有資料表,並傳回進度資訊。
analyze verbose;
只分析 LISTING 資料表。
analyze listing;
分析 VENUE 資料表中的 VENUEID 和 VENUENAME 資料欄。
analyze venue(venueid, venuename);
只分析 VENUE 資料表中的述詞資料欄。
analyze venue predicate columns;