|
インデックスは、特定の値を検索する操作、または特定の値によって並べ替える操作を最適化します。これらの操作のいずれかを頻繁に実行するすべての列に対し、インデックスを定義します。インデックスは、クエリの最適化において、特定の行または行のグループに対する高速の取得方法を提供します。Pervasive PSQL は、参照整合性(RI)付きのインデックスも使用します。インデックスは結合におけるパフォーマンスを向上し、クエリを最適化しやすくします。RI の詳細については、『Pervasive PSQL User's Guide』を参照してください。
Pervasive PSQL データベースでは、トランザクショナル データベース エンジンが定義する物理ファイルの一部としてインデックスを作成し、管理します。トランザクショナル データベース エンジン は、Insert、Update、または Delete オペレーションのすべての管理を行います。これらのアクティビティは、すべての Pervasive PSQL アプリケーションに対して透過的です。
インデックスを作成するには、CREATE INDEX ステートメントを使用します。この方法では、名前付きインデックスを作成します。名前付きインデックスを作成した後、そのインデックスを削除できます。インデックスの削除の詳細については、第 14 章 データの挿入と削除を参照してください。
インデックスを使用して行をソートしたり個々の行を高速に取得できますが、データベースのディスク保存領域が増加し、Insert、Update、または Delete オペレーションにおけるパフォーマンスが多少低下します。インデックスを定義するときは、これらの相殺条件を考慮してください。
次の例では、CREATE INDEX ステートメントを使用して、既に存在するテーブルにインデックスを追加します。
メモ
多数のデータを含むファイルで CREATE INDEX ステートメントを使用する場合は、実行が終了するまでにある程度の時間がかかり、その間はほかのユーザーがそのファイル内のデータにアクセスできないことに注意してください。
CREATE TABLE ステートメントと CREATE INDEX ステートメントの詳細については、『SQL Engine Reference』を参照してください。
同じテーブル内の単一の列または列のグループ上にインデックスを作成できます。複数の列を含むインデックスをセグメント化されたインデックスと呼び、各列をインデックス セグメントと呼びます。
たとえば、サンプル データベースの Person テーブルには以下の 3 つのインデックスがあります。
インデックス セグメントの数は、データ ファイルのページ サイズの影響を受けます。PAGESIZE キーワードの使用方法の詳細については、『Btrieve API Guide』を参照してください。テーブルに対して作成できるインデックスの最大数は、データ ファイルのページ サイズと各インデックス内のセグメント数により異なります。表 42 に示すように、ページ サイズが 4096 バイトより小さいデータ ファイルには、ページ サイズ 4096 のデータ ファイルと同じ個数のインデックス セグメントを収容できません。使用するインデックス セグメントの数はファイルのページ サイズによって異なります。
『Status Codes and Messages』マニュアルで、ステータス コード 26 "指定されたキーの数が不正です"、およびステータス コード 29 "キーの長さがインデックス セグメントとトランザクショナル インターフェイスに関して不正です" を参照してください。
ページ サイズと固定レコード長を使用して、データが格納されている効率性、たとえば、ページあたりの無駄に使用されているバイト数などを計算することができます。ページあたりのレコード数を少なくすることによって、ページレベル ロックでのロックが問題となる並行処理を改善することができます。
デフォルトでは、Pervasive PSQL はすべてのテーブルをページ サイズ 4096 バイトで作成します。ただし、CREATE TABLE ステートメントの PAGESIZE キーワードを使用してより小さなページ サイズを指定したり、MicroKernel Database エンジンを使用してテーブルを作成し、そのテーブルにより小さなページ サイズを指定することができます。
テーブルに対して定義されたインデックス セグメントの総数を計算する場合、セグメント化されていないインデックスは 1 つのインデックス セグメントとしてカウントされます。たとえば、テーブルに 3 つのインデックスが定義されていて、そのうちの 1 つに 2 つのセグメントがある場合、インデックス セグメントの総数は 4 です。
Pervasive PSQL Control Center を使用して、定義されたインデックス セグメント数とデータ ファイルのページ サイズを表示できます。このユーティリティの詳細については、『Pervasive PSQL User's Guide』を参照してください。
インデックスを作成する場合は、インデックスに一連の特性、つまり、属性を割り当てることができます。インデックス属性は、インデックスの変更可能性と、テーブルに定義するインデックスを Pervasive PSQL がどのようにソートするかを決定します。インデックス定義を作成または変更するたびに、インデックス属性を指定するパラメーターを取り込むことができます。
インデックスは、以下の属性を持つことができます。
重複不可能性と変更可能性は、インデックス全体だけに適用されます。重複不可能性または変更可能性は、インデックス全体に適用しなければ、単一のインデックス セグメントに適用することはできません。たとえば、セグメント化されたインデックスを作成し、インデックス セグメントのうちの 1 つに MOD キーワードを指定する場合、すべてのセグメントに対して MOD キーワードを指定する必要があります。
それに対して、インデックス全体に影響を与えずに個々のインデックス セグメントに大文字と小文字の区別、ソート順序、セグメント化を適用できます。たとえば、大文字と小文字を区別するインデックスに大文字と小文字を区別しないインデックス セグメントを作成できます。
以下の条件を満たせば、部分インデックスはインデックス内に定義された最後の列にのみ適用されます。
インデックスの作成および使用可能な属性の詳細については、『SQL Engine Reference』の 「CREATE INDEX」 を参照してください。
|