統計には、データベースとテーブルのメタデータに関する情報が含まれます。 クエリオプティマイザは、最新の統計を使用して実行計画を最適化および実行し、データベースのパフォーマンスを向上させます。 このトピックでは、ANALYZEステートメントを使用して、AnalyticDB for PostgreSQLの統計を手動で収集する方法について説明します。
シナリオ
手動統計収集を頻繁に実行する必要はありません。 ANALYZEステートメントを実行して、次のシナリオで統計を手動で収集できます。
テーブル内の20% 以上のデータが
INSERT、UPDATE、またはDELETE文によって変更されるか、テーブルのインデックスが作成されます。抽出、変換、読み込み (ETL) ジョブ中に、複数の
INSERT、UPDATE、またはDELETEステートメントが実行されます。データは、関数やストアドプロシージャなどの操作を使用して新しいテーブルに書き込まれます。
実行計画は、1行のみが返されると推定されることを示しています。 実行計画には、Broadcast、Sort + GroupByAgg、NestLoopなどの複数の演算子が含まれます。
使用量
ANALYZEステートメントを実行して、AnalyticDB for PostgreSQLの統計を手動で収集できます。
構文
ANALYZE [VERBOSE] [ROOTPARTITION ALL|[table [(column[, ... ])]] ]ANALYZEステートメントは、パラメーターなしで実行できます。 この場合、ステートメントはデータベース内のすべてのテーブルの統計を収集します。 この操作には長時間を要する場合がある。
Parameters
VERBOSE: スキャンされた行数や表示される行数など、ANALYZEステートメントの実行プロセスに関する統計情報を表示します。 VERBOSEパラメーターを指定しない場合、実行プロセスに関する統計は表示されません。ROOTPARTITION ALL |[table [(column[, ... ])]]: 分割テーブルの親テーブルの統計を収集します。ROOTPARTITION ALL: データベース内のすべてのパーティションテーブルの親テーブルの統計を収集します。ROOTPARTITION [table]: データベース内の特定のパーティションテーブルの親テーブルの統計を収集します。ROOTPARTITIONパラメーターを指定しない場合、ANALYZEステートメントはすべての親テーブルとサブパーティションテーブルの統計を収集します。
table[(column1, column2, ...)]: テーブルの複数の列の統計を収集します。 列名を指定しない場合、ANALYZEステートメントはテーブルのすべての列の統計を収集します。ANALYZEステートメントをすばやく実行するには、JOIN、WHERE、ORDER BY、GROUP BY、またはHAVINGステートメントを含む列の統計のみを収集します。 この場合、ANALYZEステートメントでテーブル名と列名を指定する必要があります。 例:ANALYZE t1(a, b)
例
注文テーブルのo_orderdate列とo_orderpriority列の統計を収集します。
ANALYZE orders(o_orderdate, o_orderpriority);