4.3.4 作業表を作成するSQL

XDBでは,SQLを処理するときに,作業表用DBエリアに作業表を作成することがあります。作業表には,ソートしたデータが一時的に格納されます。このため,大量のデータをソートすると,作業表を作成する処理による負荷によって,処理性能が低下することがあります。

<この項の構成>
(1) 作業表を作成する要因となるSQLと作業表の作成を回避する方法
(2) 作業表の種類と構成列

(1) 作業表を作成する要因となるSQLと作業表の作成を回避する方法

作業表を作成する要因となるSQLと,作業表の作成を回避する方法を次の表に示します。

表4-5 作業表を作成する要因となるSQLと作業表の作成を回避する方法

項番作業表が作成される要因となるSQL作業表が作成される目的作業表の作成を回避する方法
1ORDER BY句の指定があるSQL検索結果のソート処理に使われます。ORDER BY句に指定している列にインデクスを定義してください。
2DISTINCT集合関数の指定があるSQL重複排除のためのソート処理に使われます。DISTINCT集合関数の引数列を第一構成列とするインデクスを定義してください。
参考
作業表が作成されているかどうかは,次に示すどちらかの方法で確認できます。
  • eexdbsqlコマンドの#SET OPT REPORTの実行結果
  • アクセスパス情報
eexdbsqlコマンドの#SET OPT REPORTについては,「10.運用コマンド」の「eexdbsql(SQLの実行)」の「■#SET OPT REPORT(インデクス情報,作業表情報の表示)」を参照してください。
アクセスパス情報については,「7.6 アクセスパス情報の表示」を参照してください。

(2) 作業表の種類と構成列

作業表用DBエリアには,作業表と作業表のインデクスが格納されます。作業表の構成列とインデクス構成列を次の表に示します。

表4-6 作業表の構成列とインデクス構成列

項番作業表の種類作業表の構成列作業表のインデクス構成列
1ORDER BY句の実行時に作成される作業表
  • ORDER BY句に指定した列
  • FROM句に指定した表の行ID
ORDER BY句に指定した列
2DISTINCT集合関数の実行時に作成される作業表DISTINCT集合関数の引数に指定した列DISTINCT集合関数の引数に指定した列

作業表の定義では,構成列数や列の長さの合計などに制限があり,制限を超えるとSQLがエラーになります。構成列数や列の長さの合計などに関する制限については,マニュアル「TP1/EE/Extended Data Cache SQLプログラミング」の「CREATE TABLE(表の定義)」の「共通規則」を参照してください。

作業表のインデクスの定義では,インデクスキーの長さ(列の長さ)に制限があり,制限を超えるとSQLがエラーになります。インデクスキーの長さ,および制限については,マニュアル「TP1/EE/Extended Data Cache SQLプログラミング」の「CREATE INDEX(インデクスの定義)」の「共通規則」を参照してください。