統計は、一定の間隔で現在のデータに関して収集できます。これはテーブル内のすべてのデータについてのデータを収集するよりも効率的です。特に、新しいデータが読み込まれるときは、グローバル統計が更新され、テーブル全体(現在と過去のデータの両方)の読み取りと集計が必要になる可能性があるため、そのような場合に効率的になります。
グローバル統計は、現在および過去のデータの両方を含む問合わせを最適化するのに役立ちますが、これらの統計の収集は、現在のデータに限定された統計の収集よりも高いデータ変更のしきい値で発生する可能性があります。例えば、変更にデータの10%以上が関係する場合は常に現在のデータの統計を更新できますが、グローバル統計収集のしきい値は20%になる可能性があります。
例: 現在のデータに関する統計の収集
この例では、現在のデータを無効およびクローズしたものと分離するためにパーティション分割された二重テンポラル テーブルで統計情報を収集する方法を示します。
CREATE MULTISET TABLE Policy_BiTemp ( Policy_ID INTEGER, Customer_ID INTEGER, Policy_Type CHAR(2) NOT NULL, Policy_Details CHAR(40), Validity PERIOD(DATE) NOT NULL AS VALIDTIME Policy_Duration PERIOD(TIMESTAMP(6) WITH TIME ZONE) NOT NULL AS TRANSACTIONTIME ) PRIMARY INDEX (Policy_ID) PARTITION BY CASE_N( (END(Validity) IS NULL OR END(Validity) >= CURRENT_DATE -INTERVAL '2' DAY) AND END(Policy_Duration) >= CURRENT_TIMESTAMP, END(Validity) < CURRENT_DATE-INTERVAL '2' DAY AND END(Policy_Duration) >= CURRENT_TIMESTAMP, END(Policy_Duration) < CURRENT_TIMESTAMP);
CASE_N式によって作成された最初のパーティションは、現在のパーティションです。テーブルのほとんどの問合わせには現在のパーティションが関係するため、統計情報は現在のデータについて収集する必要があります。
COLLECT STATISTICS COLUMN Policy_ID ,COLUMN Customer_ID ,COLUMN Policy_Type ON QUERY (SELECT Policy_ID,Customer_ID,Policy_Type FROM Policy_BiTemp WHERE (END(Validity) IS NULL OR END(Validity) >= CURRENT_DATE - INTERVAL '2' DAY) AND END(Policy_Duration) >= CURRENT_TIMESTAMP ) AS QS_Policy_Bitemp_Currdata;
COLLECT STATISTICSの詳細については、<SQLデータ定義言語>を参照してください。