前のページ|次のページ

SPD Engineにおける効率的なインデックス付け

インデックス付けの並列処理

インデックスによって、WHERE式処理およびBY式処理のパフォーマンス向上が可能になります。SPD Engineでは、並列処理ができるので、インデックスの迅速な作成および更新が可能になります。
SPD Engineのインデックスは特に、さまざまなサイズのデータセットおよびデータ分散に適しています。これらのインデックスには、インデックス付き変数値のセグメント化ビューとグローバルビューの両方が含まれます。この機能を使用すると、SPD Engineで、次のクエリの両方を最適にサポートできます。
  • グローバルデータビューを必要とするクエリ(BY式処理など)
  • セグメント化ビューを必要とするクエリ(WHERE式の並列処理など)

並列処理でのインデックス作成

SPD Engineデータのインデックスは、非同期で並列作成できます。非同期並列インデックスの作成を可能にするには、ASYNCINDEX=データセットオプションを使用します。
複数のインデックスを有するデータセットの作成時には、このオプションを、DATAステップのINDEX=オプションおよびPROC DATASETS MODIFYステートメントと一緒に使用します。どちらの方法でも、1回のデータセットスキャンによってすべての宣言インデックスを事前設定することができます。
次の例は、DATAステップを使用して並列作成されたインデックスを示しています。変数Xに単一インデックス、変数AおよびBに複合インデックスが作成されます。
data foo.mine(index=(x y=(a b)) asyncindex=yes);   
   x=1;
   a="Doe";
   b=20;
run;
複数のインデックスを並列作成するには、すべてのキー並べ替えを同時に行うのに十分なユーティリティディスク領域を割り当てる必要があります。十分なメモリ領域も割り当ててください。ディスク領域を割り当てるにはSPDEUTILLOC=システムオプションを使用し、追加メモリを割り当てるには構成ファイル内か起動時にSPDEINDEXSORTSIZEシステムオプションを使用します。
DATASETSプロシジャには柔軟性があるので、複数のMODIFYグループを使用したバッチ並列インデックス作成が可能です。一度にすべてのインデックスを作成すると大量の領域が必要になりますが、そのかわりに、次の例に示すようにグループ単位でインデックスを作成できます。
proc datasets lib=main;
   modify patients(asyncindex=yes);
      index create number;
      index create class;
   run;
   modify patients(asyncindex=yes)'
      index create lastname firstname;
   run;
   modify patients(asyncindex=yes);
      index create fullname=(lastname firstname);
      index create class_sex=(class sex);
   run;
quit;
インデックスNumberおよびインデックスClass、インデックスLastNameおよびインデックスFirstName、ならびにインデックスFullNameおよびClass_Sexがそれぞれ並列作成されます。

並列処理でのインデックス更新

SPD Engineでは、データセット追加操作時の並列インデックス更新もサポートされています。複数のスレッドによって、データストアおよびインデックスファイルの更新が可能になります。SPD Engineでは、データセットの追加操作または挿入操作が、並列実行の可能な一連のステップに分解されます。並列処理の到達レベルは、データセット内のインデックス数によって決まります。並列インデックス作成と同様に、この操作では、インデックス追加処理の一部であるキー並べ替えのためにメモリおよびディスク領域が使用されます。メモリを割り当てるにはシステムオプションSPDEINDEXSORTSIZE=、ディスク領域を割り当てるにはSPDEUTILLOC=を使用します。
注: ASYNCINDEXオプションは、並列インデック更新に対しては無効です。
前のページ|次のページ|ページの先頭へ