データベース統計情報

システムは最良の照会実行プランを作成する際に、アクセスするデータベース表に関する情報を評価します。 最新の統計情報を利用できなければ、システムは実際の表から独立した内部のデフォルト値を使用しますが、この場合には最適な照会とならず、実行に要する時間が長くなります。

次の表では、統計情報について説明します。
表 1. データベース情報
エレメント 説明
表ごと レコード数
列ごと
  • 最小値:
  • 最大値:
  • null のカウント (列あたり)
  • 別個の値の数 (「ばらつき」とも呼ばれます)
システムは統計情報を多くの目的に使用します。
  • オプティマイザーは、レコード数、列における別個の値の数、最小値と最大値の間でデータが均等に分散しているとの想定に基づいて、処理対象となる行数を推定し、結合する 2 つの表のうち、どちらが小さいかを判断します。
  • オプティマイザーは、この最小値と最大値に基づいて、実行すべき計算のタイプ (64 ビット、または 128 ビットなど) を判断します。
  • データベース表に null 値がある場合、システムはコード生成の過程で、フィールドが null 値かどうかをテストおよびチェックする追加コードを生成する必要があります。 追加コードは、実行時間に追加の CPU サイクルが含まれることを意味します。

こうした情報を収集するのが GENERATE STATISTICS コマンドです。 GenStats 特権がある場合には、データベース、表、個別の列に対して、このコマンドを実行することができます。 デフォルトでは admin ユーザーは、任意のデータベース (データベースのすべての表を処理する場合) または任意の個々の表でこのコマンドを実行できます。

admin ユーザーは、他のユーザーにこの特権を割り当てることができます。 例えば、DEV データベースの 1 つまたはすべての表で GENERATE STATISTICS を実行できる特権を user1 に割り当てるには、admin ユーザーは、システム・データベースの表で LIST を実行できる特権、および DEV データベースから GENSTATS を実行できる特権を user1 に割り当てる必要があります。以下に SQL コマンドの例を示します。
SYSTEM(ADMIN)=> GRANT LIST ON TABLE TO user1;
DEV(ADMIN)=> GRANT GENSTATS ON TABLE TO user1;

GenStats特権の詳細については、表1を参照のこと。

次の表では、このような場合に使用する nzsql コマンド構文について説明します。

表 2. 統計情報生成の構文
説明 構文
データベース (すべての表) GENERATE STATISTICS;
特定の表 (すべての列) GENERATE STATISTICS ON table_name;
表内の個別列 GENERATE STATISTICS ON my_table(name, address, zip);

GENERATE STATISTICS コマンドは、すべての表のすべての行を読み取って、ばらつきを判断します (サンプリングは行いません)。 そのため、最も正確で最高の品質の統計情報を提供します。