ttOptSetColIntvlStats

このプロシージャは、時間隔情報を含む、指定した列の統計を変更します。このプロシージャを使用すると、TimesTenが自動的に統計を計算するのではなく、アプリケーションによって統計を手動で設定できます。この機能は、データが挿入される前にコマンドを準備したり、表の特性が実行計画の選択に与える影響を調べる場合に役立ちます。このプロシージャによって、COL_STATSシステム表の関連する行が変更されます。現在索引付けされていない列に対する時間隔統計の変更は無効です。

このプロシージャは表にデータが存在する前から使用できるため、基本的な妥当性チェックは実行されますが、指定する値は実際の値とは関係のないものでもかまいません。

必要な権限

このプロシージャには、所有者の場合は権限が必要ありませんが、所有者でない場合はALTER ANY TABLE権限が必要です。

TimesTen ScaleoutおよびTimesTen Classicでの使用

このプロシージャは、TimesTen Classicでサポートされています。

TimesTen Scaleoutアプリケーションでこの組込みプロシージャをコールできます。

TimesTen Scaleoutでは、このプロシージャはグリッド内のすべての要素に対して実行されます。

関連ビュー

このプロシージャには関連ビューはありません。

構文

ttOptSetColIntvlStats('tblName', 'colName', invalidate, (stats))

パラメータ

ttOptSetColIntvlStatsには、次のパラメータがあります。

パラメータ 説明

tblName

TT_CHAR (61) NOT NULL

アプリケーション表の名前。表の所有者を含めることができます。表名の指定にシノニムは使用できません。

colName

TT_CHAR (30) NOT NULL

その表内の列の名前。

invalidate

TT_INTEGER

0(no)または1(yes)。invalidateが1の場合、影響を受ける表を参照するコマンドはすべて、再実行時に再び自動的に準備されます。このようなコマンドには、他のユーザーが準備したコマンドが含まれます。invalidate0の場合、統計は変更されたとはみなされず、既存のコマンドは再準備されません。

stats

VARBINARY (409600) NOT NULL

次の形式を使用して、列のstatsを設定します。

(numInterval integer, numNull integer, totUniq integer, totTups integer,

/* information for interval 1 */

(numUniq integer, numTups integer, frequency of most occurred value integer, minVal, maxVal, modalVal),

/* information for interval 2 */...)

numUniq値は、一意の値から1を引いた数です。

numTups値は、値がモーダル値ではない行数です。

モーダル値(modalVal)とは、指定した時間隔で最も頻繁に出現する値です。

このパラメータは複合構造であるため、ODBC関数を使用してパラメータ化することも、ttIsql describeコマンドを使用して記述することもできません。たとえば、SQLPrepare(hstmt, "call ttOptSetColIntvlStats('t1', 'c1', 1, ?)", SQL_NTS))のような文は失敗します。

結果セット

ttOptSetColIntvlStatsは結果を返しません。

t1.x1に次のような統計を設定します。

  • 2つの時間隔

  • 整数型

  • 10行のNULL値

  • 10の一意値

  • 100行

  • 時間隔1(最も頻繁に出現する値の他に4つの一意値、最も頻繁に出現する値以外の値を持つ40の行、最も頻繁に出現する値を持つ10の行、min = 1max = 10mod = 5)

  • 時間隔2 (最も頻繁に出現する値の他に4つの一意値、最も頻繁に出現する値以外の値を持つ20の行、最も頻繁に出現する値を持つ20の行、min = 11max = 20mod = 15)

この場合、次の文を実行します:

CALL ttOptSetColIntvlStats('t1', 'x1', 1, (2, 10, 10, 100, 
(4, 40, 10, 1, 10, 5), (4, 20, 20, 11, 20, 15)));

ノート:

時間隔の最小値および最大値をVARBINARYとして指定する必要があります。NULL値を最小値または最大値として指定することはできません。値は、プラットフォーム固有のエンディアン形式で格納されます。