ANALYZE
クエリプランナーで使用するテーブル統計を更新します。
必要な権限
ANALYZE に必要な権限を以下に示します。
スーパーユーザー
ANALYZE の権限を持つユーザー
関連付けの所有者
テーブルの共有先であるデータベース所有者
構文
ANALYZE [ VERBOSE ] [ [ table_name [ ( column_name [, ...] ) ] ] [ PREDICATE COLUMNS | ALL COLUMNS ]
パラメータ
- VERBOSE
-
ANALYZE オペレーションに関する進捗情報メッセージを返す句。このオプションは、テーブルを指定しないときに役立ちます。
- table_name
-
一時テーブルを含む、特定のテーブルを分析できます。テーブルをそのスキーマ名で修飾することができます。また、table_name を指定して単一のテーブルを分析することもできます。1 つの ANALYZE table_name ステートメントで複数の table_name を指定することはできません。table_name 値を指定しなかった場合、システムカタログの永続テーブルを含め、現在接続されているデータベースのすべてのテーブルが分析されます。最後の ANALYZE 以降に変更された行の割合が分析のしきい値よりも低い場合、Amazon Redshift はテーブルの分析をスキップします。詳細については、「分析のしきい値」を参照してください。
Amazon Redshift のシステムテーブル (STL テーブルと STV テーブル) を分析する必要はありません。
- column_name
-
table_name を指定する場合、テーブルの 1 つ以上の列を指定することもできます (括弧内に列をカンマ区切りリストとして指定します)。列リストが指定された場合、リストされている列のみが分析されます。
- 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_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 に設定すると、少なくとも 10,000 行が変更された場合は 100,000,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;