インデックスの作成と編集

提供: ER/Studio Data Architect
移動先: 案内検索

物理モデルの作成 への移動

インデックスとは、順序付けられた一連のデータ セットで、ベース テーブルの各行へのポインタとなります。各インデックスは、1 つ以上のテーブル カラム内のデータ値に基づいています。インデックスは、テーブル内のデータとは別のオブジェクトです。作成されたインデックスは、データベースによって自動的に構築および管理されます。インデックスはパフォーマンス向上のために使用されます。ほとんどの場合、データ アクセスを高速化できます。インデックスをビューに作成することはできませんが、ビューの元となるテーブルにインデックスを作成して、ビュー操作のパフォーマンスを向上させることができます。また、インデックスは一意性を確保するために使用されることもあります。つまり、ユニーク インデックスが設定されたテーブルでは、複数の行で同一キーを持つことは許可されません。[ユニーク]チェック ボックスをオンにすると(UNIQUE を指定)、各行は一意なインデックス値を持つ必要があります。[ユニーク]チェック ボックスをオフにすると(NONUNIQUE を指定)、各行は重複したインデックス値を持つことができます。Oracle の場合は、3 つ目のオプションである BITMAP が用意されています。このインデックス タイプが一般的に使用されるのは、データ ウェアハウスの作成時や、大量のデータやアドホック クエリーを扱うその他の環境で、DML トランザクションの同時発生が少ない場合です。

インデックスがパフォーマンスを改善するのは、データの検索に効率的なメカニズムを提供するためです。インデックスは図書館のカード目録のように機能します。つまり、すべての棚の本を検索する代わりに、カード目録で本の参照事項を検索し、その結果から本の場所を特定する仕組みです。論理インデックスにはデータへのポインタが格納されるため、実体である全データを走査する必要がなくなります。

インデックスは、クエリーのパフォーマンスを向上するための特に重要な機能の 1 つです。しかし、十分な検討を行わずにインデックスを使用すると、パフォーマンスが低下する場合があります。クエリーの効率を最大化するため、テーブルに作成する最適なインデックス数、インデックス タイプ、およびインデックスの配置を決定する必要があります。

インデックスを最適化するには、次のルールを検討してください。

  • インデックス数 - インデックスを作成すると、読み取り(クエリーの実行)速度は向上しますが、書き込み(挿入、更新、削除)速度は低下します。これは、データを変更するとインデックスも必ず変更されるためです。そのため、インデックスの使用には十分な検討が必要です。テーブルへの挿入、更新、削除の処理が頻繁に発生することがわかっている場合、そのテーブルに設定するインデックス数を制限する必要があります。反対に、ルックアップ テーブルのように、基本的に静的なテーブルの場合は、インデックス数が多くても全体のパフォーマンスが低下することはありません。
  • インデックス タイプ - 一般に、クエリーには 2 つのタイプがあります。限定されたデータ セットを返すポイント クエリーと、より広範囲のデータ セットを返す範囲クエリーです。データベースがクラスタ化および非クラスタ化インデックスをサポートする場合、クラスタ化インデックスは範囲クエリーに適しています。また、比較的カーディナリティが低いインデックス カラムの組み合わせをクラスタ化インデックスに指定するのも適しています。非クラスタ インデックスはポイント クエリーに適しています。
  • インデックスの配置 - ほとんどの SQL データベースには、テーブルとインデックスを配置するための物理ストレージ機構があります。少なくとも、テーブルとインデックスを別々の場所に配置して、このデータベース機能の利点を活用することをお勧めします。そうすることで、インデックスとテーブル データを並列して読み出すことができ、パフォーマンスが向上します。

テーブルのインデックス作成に加えて、補助テーブルのインデックスを定義することもできます。詳細は、「補助テーブルの作成と編集」を参照してください。

インデックスを作成する

  1. モデル エクスプローラで、物理データ モデルを選択します。
  2. モデル ウィンドウで、インデックスを追加するテーブルをダブルクリックします。
  3. [テーブル エディタ][カラム]タブで、カラムをダブルクリックして[主キー]チェック ボックスをオンにします。
    インデックスが自動的に作成され、モデル エクスプローラの[インデックス]ノードに表示されます。
  4. [テーブル エディタ][インデックス]タブをクリックします。
  5. 依存型リレーションシップを作成して、親テーブルの主キーが子テーブルに外部キーとして移行される場合も、インデックスが作成されます。

インデックスを編集する

  1. モデル エクスプローラで、物理データ モデルの[インデックス]ノードを展開して、編集するインデックスをダブルクリックします。
  2. インデックスが属するテーブルをテーブル エディタを開き、[インデックス]タブでインデックスを編集することもできます。
  3. [インデックス エディタ]で必要な設定を完了したら、[OK]をクリックします。
  4. インデックス オプションを変更しても DDL に変更点が反映されない場合、[DDL]タブの[カスタマイズ]をクリックして、[DDLタブ オプション]ダイアログボックスで、変更点を表示するオプションが選択されているかを確認してください。たとえば、MySQL のテーブルで非ユニーク インデックスを作成して[フルテキスト]をオンにした場合、そのインデックスを DDL に表示するには、[DDLタブ オプション]ダイアログ ボックスの[非ユニーク インデックス]チェック ボックスをオンにします。

[インデックス エディタ]のオプション

以下のセクションでは、[インデックス エディタ]のオプションの設定について説明します。

  • 使用できるオプションとタブは、データベース プラットフォームによって異なります。
  • [主キー インデックスに設定]:  読み取り専用です。選択されている場合、そのインデックスが主キーであることを示します。
  • [制約]:  選択したカラムのすべての値が一意でなければならないことを指定する制約を入力します。ユニーク制約は主キーに似ています。いずれも、テーブルから選択したカラムまたはカラム セットのすべての値が一意である必要があります。
  • [物理のみ]:  選択すると、このインデックスは物理モデルと論理モデルの比較時に無視されます。
  • [無効化]:  主キーを含むテーブルの構文に、CONSTRAINT ... DISABLE 文を追加します。主キー制約を無効にすると、子テーブルの外部キー インデックスも無効にする必要があります。[無効化]チェック ボックスをオンにすると、すべての外部キー 制約を無効にするためのダイアログ ボックスが自動的に表示されます。制約を無効にすると、大きなデータを読み込んだり、テーブルに多数の変更を加えたり、または複数のテーブルを 1 つずつインポートする際に、パフォーマンスを向上させることができます。
  • 索引構成表の主キーを無効にすることはできません。上で説明した[無効化]オプションは使用不可になります。
  • [NoValidate]:  このオプションは、Oracle 9i、10g および 11g プラットフォームでのみ使用できます。テーブルのデータに制約を適用しない場合に、NoValidate を指定します。

FK または PK 制約の生成が有効になっている場合、制約のオプションを設定すると、NOVALIDATE が生成されます。たとえば、PK が無効になっておらず、NoValidate が設定されている場合、DDL は次のようになります。

CREATE TABLE Entity1

(

PKCOL CHAR(10) NOT NULL,

CONSTRAINT PK1 PRIMARY KEY (PKCOL) NOVALIDATE

);

CREATE TABLE 内、または ALTER TABLE で作成した FK にも同じ構文が使用されます。

ALTER TABLE ENTITY2 ADD CONSTRAINT BLIVOT

FOREIGN KEY (PK1)

REFERENCES ENTITY1(PK1) NOVALIDATE


Disable が設定されており、NoValidate が設定されていない場合、ALTER TABLE で作成された FK の DDL は、NOVALIDATE がデフォルトのオプションになるため、次のようになります。PK でも同じ構文が使用されます。

ALTER TABLE ENTITY2 ADD CONSTRAINT BLIVOT

FOREIGN KEY (PK1)

REFERENCES ENTITY1(PK1) DISABLE VALIDATE

利用可能なタブの詳細については、次のリンクを参照してください。

[カラム]タブ

インデックスの基になるカラムまたはキーを選択します。インデックスの効率は、選択したキーとその検索順序によって決まります。

[プロパティ]タブ

このタブは、Oracle 8.x、9i、10g、11g、および 12c で使用できます。

  • [インデックス タイプ]:  適切なインデックス タイプを選択します。この設定はパフォーマンスに大きな影響を与えます。
  • [ビットマップ]:  同時実行されているアプリケーションによって頻繁に更新されないインデックスに対して選択します。ただし、一意なカラム(主キーの候補)のインデックスに適用した場合、カラムのカーディナリティとデータの分布によっては余分な領域が必要となるので注意してください。ROWID 一覧の代わりに、各キー値のビットマップが使用されます。
  • [B ツリー]:  主キーのインデックス作成時に選択します。Oracle では主キー インデックスをサポートしないためです。また、領域の節約が検討される場合にも B ツリーを選択します。B ツリーでは、どの行に対してもアクセス時間が等しくなるようにインデックスを均衡化します。
  • [ユニーク]UNIQUE): インデックス キーに重複する値がなく、テーブル内のすべての行が一意となることを指定します。このオプションを選択しない場合は非ユニーク インデックスが作成され、テーブルの行はインデックスを定義するカラム内で重複した値を持つことができます。ユニーク インデックスでは、データ値ごとに 1 つの ROWID が存在します。このオプションを選択すると、Oracle では主キー制約の作成前に、ユニーク インデックスが別に生成されます。
  • [No Sort]NOSORT): 選択すると、インデックスが再構築される際にデータがソートされません。
  • [Reverse Byte Order]:  カラムの順序を維持しながら、インデックスを設定した各カラム(ROWID は除く)のバイトを逆にします。インデックスのキーを逆にすると、挿入値はインデックスのリーフ キー全体に分散されます。
  • [Enable Compression]COMPRESS): インデックスの圧縮を有効化します。圧縮によって、非ユニーク インデックスでキーの重複値に対する領域を削減できます。連結インデックス(複数カラムから構成されるインデックス)では、圧縮オプションによってインデックスのサイズを半分以上削減できます。圧縮オプションでは、複数カラムから構成されるインデックスの接頭辞の長さを指定できます。
  • [接頭辞の長さ]COMPRESS 接頭辞): 複数カラムから構成されるインデックスの接頭辞の長さです。[Enable Compression]チェック ボックスをオンにすると入力できます。
  • [テーブルスペース]:  テーブル インデックスを格納するテーブルスペースが表示されます。
  • [No Logging]:  オンにすると、DDL 操作が REDO ファイルに記録されません。これにより、インデックスの作成や更新に要する時間を最大 30% 削減できます。
  • [Pct Free]PCTFREE): 将来の更新のために各データ ブロックに確保する領域の割合の最大値を指定します。この予約領域により、更新処理でデータ行の長さが拡張されることで生じる、行の移行や連鎖を回避できます。更新されないテーブルでは、この値を 0 に設定してください。
  • [Initial Trans]INITTRANS): データ ブロックのヘッダに領域があらかじめ確保される DML トランザクションの数を指定します。Oracle では、ブロック内のどの行がコミット済みおよびコミット前の変更点を含んでいるかを示す制御情報をデータ ブロックに格納します。保持される履歴の量は、このパラメータによって制御されます。非常に短い期間に、多数のトランザクションが同時に同じデータ ブロックを変更する場合、Oracle では、ある行が最新のトランザクションで更新されたかどうかを決定するための履歴情報を確保できないことがあります。トランザクション エントリを動的に割り当てる際のオーバーヘッドを回避するため、データ ブロックを更新できる同時トランザクションの最小数を制限します。インデックスに大きな値を指定すると、多数のトランザクションが同じブロックを更新する可能性があります。
  • [Max Trans]MAXTRANS): パフォーマンスの問題を回避するため、データ ブロックを更新できる同時トランザクションの最大数を制限します。INITRANS によって確保された領域が使い切られると、利用可能な空き領域から追加のトランザクション エントリ用の領域が割り当てられます。この領域は一度割り当てられると、事実上、ブロック ヘッダの永続的なパートになります。このパラメータは、データ ブロック内のデータを同時に使用できるトランザクション エントリの数を制限します。したがって、データ ブロック内のトランザクション エントリに割り当て可能な空き領域も制限することになります。
  • [パラレル]:  Oracle のパラレル クエリー オプションを選択します。パラレル クエリー オプションを使用すると、パフォーマンスを大幅に向上させることができます。
  • [Degrees]:  操作で使用されるクエリー サーバー プロセスの数を入力します。
  • [Instances]:  パラレル サーバー間で、パラレル クエリーをどのようにパーティション化するかを指定します。
  • [Initial Extent]INITEXTENT): Oracle が確保するデータ ブロックの初期数を指定します。Oracle が確保するデータ ブロックの数は、そのテーブル行の Initial Extent に対応します。
  • [Next Extent]NEXT): 次のエクステントのサイズをキロバイト(KB)単位で指定します。この数値は、テーブルスペースの空き領域内の利用可能な最大チャンクと比較して検討する必要があります。テーブルが次のエクステントを割り当てられない場合は、エクステントを拡張できず、データを追加できません。
  • [Pct Increase]PCTINCREASE): 前のエクステントのサイズを基準にして、次のエクステントを拡張する割合を指定します。Percent Increase の設定には注意が必要です。オブジェクトの増加する割合を大きく指定すると、テーブルスペース内の利用可能な空き領域に大きく影響する場合があるためです。
  • [Min Extents]MINEXTENTS): セグメントの作成時に割り当てるエクステントの数を指定します。すべての使用済みエクステントまたは空きエクステントが指定値以上であることを保証して、空き領域の断片化を制御します。
  • [Max Extents]MAXEXTENTS): Oracle がインデックスに割り当て可能なエクステントの最大数を指定します。この制限に達すると、Oracle でそれ以上クラスタは拡張されず、データを追加できません。インデックスに割り当て済みのエクステント数がこの制限に達していないか、注意深く監視してください。
  • [Free Lists]FREELISTS): テーブルに適用する空きリストの数を指定します。デフォルトは 1 で、これが最小値です。空きリストは、インデックスに対して複数のプロセスが同時に発行された際のデータ ブロックの割り当て管理に役立ちます。Oracle では、INSERT 操作が発生したときに使用するデータ ブロックを空きリストによって決定します。Oracle では、複数の空きリストを持つテーブルおよびインデックスを定義できます。すべてのテーブルおよびインデックスの空きリストは、同時に発生する可能性のある INSERTUPDATE アクティビティの最大数に設定すべきです。たとえば、インデックスで最大 20 人のエンド ユーザーが INSERT 操作を実行する可能性がある場合、そのインデックスには FREELISTS=20 を設定する必要があります。空きリストの値が低すぎると、Oracle のパフォーマンスが低下する原因となります。FREELISTS または FREELIST GROUPS を増加させると、セグメント ヘッダの競合を軽減できます。
  • [Free List Groups]FREELIST GROUPS): Parallel Server オプション付きの Oracle をパラレル モードで使用する場合にのみ有効です。テーブルに複数のセグメント ヘッダを許可する空きリスト グループの数を指定します。これによって、複数のタスクがインデックスへの挿入操作を実行できます。その結果、セグメント ヘッダの競合を軽減できます。空きリスト グループは、インデックスにアクセスする Oracle Parallel Server インスタンスの数に設定する必要があります。オブジェクトがパーティション分割されていたり、セグメント ヘッダが競合する場合、空きリスト グループを非RACシステムに対して設定できます。
  • [Buffer Pool]BUFFER_POOL): メモリ内データ ブロックのキャッシュに使用されるメモリ構造(バッファ プール)を指定します。これによりデータ アクセスの速度が向上します。
  • [DEFAULT]: データ ブロックをデフォルトのバッファ プールにキャッシュします。
  • [KEEP]:  オブジェクトをメモリ内に保持して I/O 競合を回避します。
  • [RECYCLE]:  使用していないデータ ブロックを直ちにメモリから除去し、キャッシュ スペースを節約します。

[オプション]タブ

使用できるオプションは、選択したデータベース プラットフォームによって異なります。データベース プラットフォーム別のインデックス オプションの詳細については、次のリンクを参照してください。

Hitachi HiRDB のインデックス オプション

  • [ユニーク]UNIQUE): インデックス キーに重複する値がなく、テーブル内のすべての行が一意となることを指定します。このオプションを選択しない場合は非ユニーク インデックスが作成され、テーブルの行はインデックスを定義するカラム内で重複した値を持つことができます。

IBM DB2 for AS/400、Common Server、および UDB バージョン 5 ~ 9 のインデックス オプション

  • [ユニーク]UNIQUE): インデックス キーに重複する値がなく、テーブル内のすべての行が一意となることを指定します。このオプションを選択しない場合は非ユニーク インデックスが作成され、テーブルの行はインデックスを定義するカラム内で重複した値を持つことができます。
  • [Where Not Null]WHERE_NOT_NULL): ユニーク インデックスに複数の NULL が存在できることを指定します。インデックスに、NULL が許可されるカラムが少なくとも 1 つ含まれており、すべての非 NULL エントリが一意である場合に役立ちます。
  • [クラスタ]:  クラスタ化インデックスを作成します。クラスタ化インデックスでは、テーブルの行がデータ ページ上に連続して挿入されるため、ほとんどの場合、低いディスクI/Oでデータを取得できます。通常、クラスタ化インデックスでは値が単調に増加するカラムを選択すべきです。たとえば Identity カラムや、値が一意に増加していく他のカラムなどです。これが特に重要となるのは、テーブルで多数の INSERTSUPDATES、および DELETES 操作が実行される場合です。クラスタ化インデックスは、アクセス速度を大幅に向上させますが、その利点が得られるのは、通常、データ アクセスがクラスタ化インデックスの同順または逆順で連続的に実行される場合や、ある範囲の項目が選択される場合に限られます。
  • [Percent Free]PCTFREE): 将来の更新のために各データ ブロックに確保する領域の割合の最大値を指定します。この予約領域により、更新処理でデータ行の長さが拡張されることで生じる、行の移行や連鎖を回避できます。更新されないテーブルでは、この値を 0 に設定してください。
  • [Min Percent Used]MINPCTUSED): インデックスのリーフ ページで使用される領域の割合の最小値を指定します。このインデックスでオンライン インデックス デフラグが有効になります。
  • [Reverse Scans]:  作成されるインデックスで、定義された方向の逆方向にもスキャンを実行できるようになります。
  • [Include]:  インデックスのキー カラムのセットに追加のカラムを含めます。カラムを含めることで、インデックスのみのアクセスが可能になり、一部のクエリーでパフォーマンスが向上することがあります。

IBM DB2 for OS/390 のインデックス オプション

  • [ユニーク]UNIQUE): インデックス キーに重複する値がなく、テーブル内のすべての行が一意となることを指定します。このオプションを選択しない場合は非ユニーク インデックスが作成され、テーブルの行はインデックスを定義するカラム内で重複した値を持つことができます。
  • [クラスタ]CLUSTER): クラスタ化インデックスを作成します。クラスタ化インデックスでは、テーブルの行がデータ ページ上に連続して挿入されるため、ほとんどの場合、低いディスク I/O でデータを取得できます。通常、クラスタ化インデックスでは値が単調に増加するカラムを選択すべきです。たとえば Identity カラムや、値が一意に増加していく他のカラムなどです。これが特に重要となるのは、テーブルで多数の INSERTSUPDATES、および DELETES 操作が実行される場合です。クラスタ化インデックスは、アクセス速度を大幅に向上させますが、その利点が得られるのは、通常、データ アクセスがクラスタ化インデックスの同順または逆順で連続的に実行される場合や、ある範囲の項目が選択される場合に限られます。
  • IBM DB2 for OS/390 5.x で、[インデックス エディタ]の[パーティション]タブの内容を有効にするには、[オプション]タブで[クラスタ]チェック ボックスをオンにする必要があります。詳細は、「テーブル インデックスのパーティション化」を参照してください。
  • [Where Not Null]WHERE NOT NULL) ユニーク インデックスに複数の NULL が存在できることを指定します。インデックスに、NULL が許可されるカラムが少なくとも 1 つ含まれており、すべての非 NULL エントリが一意である場合に役立ちます。
  • [Concurrent Copy]COPY): インデックスの同時コピーが許可されます。インデックスのリカバリをサポートして、インデックスの可用性を向上させることができます。
  • [Do Not Close Dataset]CLOSE): 未使用のインデックスがクローズされません。このオプションを選択しない場合、開いているデータセットが最大数に到達するか、または最大数を超過したときに、未使用のデータセットがクローズされます。
  • [Defer Index Creation]DEFER): INSERT、UPDATE、および DELETE 操作時に、インデックスの変更を遅延させます。データの更新をより早く完了できますが、インデックスが同期されるまでの間、クエリーが最新情報を返さないことがあります。このオプションは、宣言済みの一時テーブルまたは補助テーブルのインデックスに対して選択することはできません。
  • [Padded]PADDED): インデックス エントリが、そのデータ型の最大長まで埋め込まれます。ほとんどのインデックス エントリが最大長に等しいか、または最大長に近い場合に、インデックスを効率的にスキャンできます。このオプションを選択しない場合、インデックスは可変長のキーをサポートし、より短いインデックスや多くのインデックス エントリを各ページに格納できます。また、インデックスのみのアクセスも可能になります。インデックスに PADDED を指定しない場合、データをインデックスから直接取得することができます。データ ページ内のデータ長をルックアップする必要はありません。ディスク領域を大幅に節約したい場合も、インデックスに PADDED を指定しないようにします。
  • [Partitioned]:  インデックスをパーティション化します。このオプションを選択すると、[インデックス エディタ|パーティション]タブからインデックス パーティション エディタを開くことができます。詳細は、「テーブル インデックスのパーティション化」を参照してください。
  • [Using Claus]USING): インデックスに作成されるインデックス領域の種類と、インデックスの管理者を指定します。USING 句を指定しない場合、DB2 によるインデックス領域の管理は、テーブルが格納されるデータベースのデフォルト ストレージ グループにリストされたボリューム上で行われます。DB2 では、デフォルト値に PRIQTYSECQTY、および Erase Data を使用します。
  • [VCAT]VCAT): 選択すると、仮想カタログ(VCAT)を使用して管理されているデータ セット上にインデックス領域を割り当てます。領域の名前はこのオプションの横に入力します。ユーザーは、インデックスに必要なデータ セットを管理します。VCAT は通常、システム カタログの定義に使用されます。インデックス領域の作成前に、VSAM データセットをあらかじめ定義する必要があります。
  • [STOGROUP]STOGROUP): 選択すると、DB2 によって管理されるデータ セットのインデックスを、指定したストレージ グループ内に保存します。インデックス領域が定義されたストレージ グループでは、すべての VSAM 割り当て作業が DB2 によって行われます。ストレージ グループ エディタ(「ストレージ グループの作成と編集」を参照)を使用して、データ モデルにストレージ グループを作成済みの場合、一覧からストレージ グループを選択できます。ストレージ グループを選択すると、[PRIQTY]および[SECQTY]の値を定義できます。パーティション化していないインデックスに無駄な領域を作成しないようにするには、[PRIQTY]および[SECQTY]を定義しないでください。代わりに、インデックスに割り当てる一次および二次領域が DB2 によって管理されます。
  • [PRIQTY]PRIQTY): インデックスに最初に割り当てるディスク領域の最小値をキロバイト単位で指定します。一次割り当ての領域は、予測したストレージ量を扱えるサイズにする必要があります。
  • [SECQTY]SECQTY): インデックスが一次割り当てのサイズに達したときに割り当てるディスク領域のサイズをキロバイト単位で指定します。二次割り当ての領域が小さすぎると、より大きな領域を必要とするアクティビティに対応するために、データ セットが頻繁に拡張されることがあります。デフォルト値である -1 は、DB2 が二次割り当てのサイズを決定することを示します。通常は一次割り当ての 10% のサイズになります。
  • [Erase Data]ERASE): インデックスの削除時にインデックスのデータ セットが消去されます。
  • [None]:  CREATE INDEX 文に USING 句を含めません。
  • [Buffer Pool]BUFFERPOOL): インデックスに使用するバッファ プールを選択します。バッファ プールの種類によって、データ アクセスを高速化するためにデータ ブロックをメモリ内にキャッシュする方法が決まります。BP0 はソート用のデフォルト バッファ プールです。
  • [Percent Free]PCTFREE): 将来の更新のために各データ ブロックに確保する領域の割合の最大値を指定します。この予約領域により、更新処理でデータ行の長さが拡張されることで生じる、行の移行や連鎖を回避できます。更新されないテーブルでは、この値を 0 に設定してください。
  • [Free Page]FREEPAGE): インデックス エントリの作成時に空き領域ページを残す頻度を指定します。0 ~ 255 の範囲でここに指定したページ番号ごとに、1 つの空きページが確保されます。
  • [Piece Size]PIECESIZE): 二次インデックスの各データ セットにアドレス可能な最大領域を指定します。サイズ値の後に、「K」(キロバイト)、「M」(メガバイト)、「G」(ギガバイト)のいずれかを追加します。単位を指定しない場合は、キロバイト単位で解釈されます。ギガバイトで指定したサイズは、DDL でメガバイト単位に変換されます。
  • [GBP Cache]GPBCACHE) データ共有環境で、グループ バッファ プールに書き込まれるインデックス ページを指定します。このオプションは、非データ共有環境では無視されます。ただし、宣言済みの一時テーブルにインデックスが存在する場合は除きます。[Changed]を指定すると、更新されたページがグループ バッファ プールに書き込まれます。[All]を指定すると、DASD から読み込まれたすべてのページがグループ バッファ プールにキャッシュされます。[None]を指定すると、バッファ プールは相互無効化にのみ使用されます。

Informix のインデックス オプション

  • [ユニーク]UNIQUE): インデックス キーに重複する値がなく、テーブル内のすべての行が一意となることを指定します。このオプションを選択しない場合は非ユニーク インデックスが作成され、テーブルの行はインデックスを定義するカラム内で重複した値を持つことができます。
  • [クラスタ]CLUSTER): クラスタ化インデックスを作成します。クラスタ化インデックスでは、テーブルの行がデータ ページ上に連続して挿入されるため、ほとんどの場合、低いディスク I/O でデータを取得できます。通常、クラスタ化インデックスでは値が単調に増加するカラムを選択すべきです。たとえば Identity カラムや、値が一意に増加していく他のカラムなどです。これが特に重要となるのは、テーブルで多数の INSERTSUPDATES、および DELETES 操作が実行される場合です。クラスタ化インデックスは、アクセス速度を大幅に向上させますが、その利点が得られるのは、通常、データ アクセスがクラスタ化インデックスの同順または逆順で連続的に実行される場合や、ある範囲の項目が選択される場合に限られます。

Interbase のインデックス オプション

  • [ユニーク]UNIQUE): インデックス キーに重複する値がなく、テーブル内のすべての行が一意となることを指定します。このオプションを選択しない場合は非ユニーク インデックスが作成され、テーブルの行はインデックスを定義するカラム内で重複した値を持つことができます。
  • [ソート順]:  インデックスのソート順を指定します。[昇順](ASC)または[降順](DESC)のいずれかを選択できます。

Microsoft Access および SQL Server のインデックス オプション

使用できるオプションは、データベース プラットフォームとバージョンによって異なります。

  • [ユニーク]UNIQUE): インデックス キーに重複する値がなく、テーブル内のすべての行が一意となることを指定します。このオプションを選択しない場合は非ユニーク インデックスが作成され、テーブルの行はインデックスを定義するカラム内で重複した値を持つことができます。
  • [クラスタ]CLUSTERED または NONCLUSTERED): クラスタ化インデックスを作成します。クラスタ化インデックスでは、テーブルの行がデータ ページ上に連続して挿入されるため、ほとんどの場合、低いディスク I/O でデータを取得できます。通常、クラスタ化インデックスでは値が単調に増加するカラムを選択すべきです。たとえば Identity カラムや、値が一意に増加していく他のカラムなどです。これが特に重要となるのは、テーブルで多数の INSERTSUPDATES、および DELETES 操作が実行される場合です。クラスタ化インデックスは、アクセス速度を大幅に向上させますが、その利点が得られるのは、通常、データ アクセスがクラスタ化インデックスの同順または逆順で連続的に実行される場合や、ある範囲の項目が選択される場合に限られます。非ユニーク インデックスに[クラスタ]オプションを選択した場合は、非ユニーク クラスタ オプションを使用できます。
  • [重複キーを無視]IGNORE_DUP_KEY): 複数行に影響を与えるデータを追加または更新して重複キーを作成しようとすると(INSERT または UPDATE 文を使用)、重複を発生させる行は追加されません。更新時はその行が破棄されます。
  • [事前にソート]SORTED_DATA): インデックスが再構築される際にデータがソートされます。
  • [非ユニーク クラスタ オプション]:  重複行が追加されたときのアクションを指定します。

MySQL のインデックス オプション

  • [ユニーク]UNIQUE): インデックス キーに重複する値がなく、テーブル内のすべての行が一意となることを指定します。このオプションを選択しない場合は非ユニーク インデックスが作成され、テーブルの行はインデックスを定義するカラム内で重複した値を持つことができます。
  • [フルテキスト]:  フルテキスト インデックスとしてインデックスを設定します。MySQL のフルテキスト インデックスは、FULLTEXT タイプのインデックスとなります。FULLTEXT インデックスは MyISAM テーブルでのみ使用されます。CREATE TABLE 時に CHARVARCHARTEXT カラムから作成できます。または ALTER TABLECREATE INDEX を使用して、後から追加することもできます。

Teradata のインデックス オプション

  • [ユニーク]UNIQUE): インデックス キーに重複する値がなく、テーブル内のすべての行が一意となることを指定します。このオプションを選択しない場合は非ユニーク インデックスが作成され、テーブルの行はインデックスを定義するカラム内で重複した値を持つことができます。
  • [プライマリ]PRIMARY): インデックスをプライマリ インデックスとして指定します。プライマリ インデックスを定義しない場合、デフォルトで、テーブル内の最初のカラムがプライマリ インデックスになります。
  • [パーティション式]PARTITION BY ): [プライマリ]を選択した場合に使用できます。式を入力して、特定の属性(週単位の日付など)によって、ある期間のデータをパーティション化できます。データをパーティション化すると、特定の週の集計データを効率的に取得できます。必要な手順は、その週のデータを読み取るだけで済みます。パーティション プライマリ インデックスの第一候補となるのは、毎日大量のデータが挿入されるようなテーブルです。このようなテーブルでは、データの日付に基づいてパーティション化する価値があります。インデックスを製品コードや代理店 ID でパーティション化しても、クエリーの速度が向上する場合があるでしょう。テキスト ボックスの幅よりも長い式を入力するには[詳細]をクリックします。パーティション式エディタが開き、複数行にわたる式を入力できます。パーティション式の例を次に示します。
    PARTITION BY RANGE_N(CAPTURE_DATE BETWEEN DATE '2007-11-30' AND DATE '2008-2-30' EACH INTERVAL '1' MONTH).
  • [統計情報の収集]COLLECT STATISTICS): テーブルの 1 つ以上の人口データを収集し、収集データの統計プロファイルを計算して、このプロファイルをデータ ディレクトリに保存します。完全な統計を収集するには、ベース テーブルをスキャンし、ソートして、各一意の値の発生回数を判断する必要があります。Teradata Optimizer は、テーブル アクセスと結合プランの生成時にこのプロファイル データを使用します。完全統計は通常、Access Module Processor(AMP)ごとに、行数が 100 行未満のテーブルの関連したカラムとインデックスに使用することをお勧めします。

これは、テーブルのインデックスに対して、[インデックス エディタ][統計情報の収集]を選択したときに、生成される SQL の例です。

COLLECT STATISTICS ON table_1 INDEX unique_1;

  • [サンプル統計]: サンプルを採取した完全なテーブル統計を収集した方が、完全なテーブル統計を収集するよりも短時間ですが、テーブル アクセスと結合プランでは最適な結果が得られない可能性があります。このオプションを指定すると、Teradata はスキャンするのに適したデータの割合を決定します。USING SAMPLE に関して最適な選択肢は、一意、または 95% 一意のカラムまたはインデックスです。

これは、テーブルのインデックスに対して、[インデックス エディタ][統計情報の収集][サンプル統計]を選択したときに生成される SQL の例です。

COLLECT STATISTICS USING SAMPLE ON table_1 INDEX unique_1;

Oracle 7 のインデックス オプション

  • [ユニーク]UNIQUE): インデックス キーに重複する値がなく、テーブル内のすべての行が一意となることを指定します。このオプションを選択しない場合は非ユニーク インデックスが作成され、テーブルの行はインデックスを定義するカラム内で重複した値を持つことができます。
  • [No Sort]NOSORT): 選択すると、インデックスが再構築される際にデータがソートされません。

PostgreSQL のインデックス オプション

  • [ユニーク]UNIQUE): インデックス キーに重複する値がなく、テーブル内のすべての行が一意となることを指定します。このオプションを選択しない場合は非ユニーク インデックスが作成され、テーブルの行はインデックスを定義するカラム内で重複した値を持つことができます。
  • [クラスタ]CLUSTER): クラスタ化インデックスを作成します。クラスタ化インデックスでは、テーブルの行がデータ ページ上に連続して挿入されるため、ほとんどの場合、低いディスク I/O でデータを取得できます。通常、クラスタ化インデックスでは値が単調に増加するカラムを選択すべきです。たとえば Identity カラムや、値が一意に増加していく他のカラムなどです。これが特に重要となるのは、テーブルで多数の INSERTSUPDATES、および DELETES 操作が実行される場合です。クラスタ化インデックスは、アクセス速度を大幅に向上させますが、その利点が得られるのは、通常、データ アクセスがクラスタ化インデックスの同順または逆順で連続的に実行される場合や、ある範囲の項目が選択される場合に限られます。

Sybase のインデックス オプション

使用できるオプションは、データベース プラットフォームによって異なります。

  • [ユニーク]UNIQUE): インデックス キーに重複する値がなく、テーブル内のすべての行が一意となることを指定します。このオプションを選択しない場合は、非ユニーク インデックスが作成され、テーブルの行は、インデックスを定義するカラム内で重複した値を持つことができます。
  • [エクスポート先]: Sybase IQ では、HG(High Group)または LF(Low Fast)インデックスを使用して、より優れた高速なクエリー プランを生成できます。HG または LF インデックスは、DATETIMEDATETIME、または TIMESTAMP カラムに対して等号述部を評価する場合にも適しています。そのカラムが GROUP BY 句で頻繁に使用され、一意な値が1,000未満(たとえば3年間の日数より少ない値)である場合は、LF インデックスが推奨されます。
  • [High Group]:  カラムが結合述部で使用されるか、またはカラムに含まれる一意な値が 1,000 を超える場合、HG(High Group)インデックスを使用します。High_Group インデックスは GROUP BY 句を効率的に処理できるため、整数データ型の結合カラムで一般的に使用されます。それぞれの外部キー カラムには独自の HG インデックスが必要です。ただし、結合インデックスが存在する場合は、明示的に作成された HG インデックス、および外部キー制約の両方を同一カラムに設定することはできません。
  • [Low Fast]:  LF(Low Fast)は、Sybase IQ で最も高速なインデックスです。カラムに含まれる一意な値が 1,000 より少ない場合、またはカラムに含まれる一意な値が 1,000 より少なく、かつ結合述部で使用されている場合、LF(Low Fast)インデックスを使用します。このインデックスが最適となるのは、カラムに含まれる一意な値が比較的少ない場合(1,000 未満)です。たとえば、性別、はい/いいえ、TRUE/FALSE、扶養家族の数、および給与クラスなどです。カラムに含まれる一意な値が 10,000 以上の場合は、LF インデックスを使用しないでください。テーブルが 25,000 行未満の場合は、HG インデックスを使用します。これによって、より少ないディスク I/O で同じ操作を実行できます。
  • [クラスタ]CLUSTER): クラスタ化インデックスを作成します。クラスタ化インデックスでは、テーブルの行がデータ ページ上に連続して挿入されるため、ほとんどの場合、低いディスク I/O でデータを取得できます。通常、クラスタ化インデックスでは値が単調に増加するカラムを選択すべきです。たとえば Identity カラムや、値が一意に増加していく他のカラムなどです。これが特に重要となるのは、テーブルで多数の INSERTSUPDATES、および DELETES 操作が実行される場合です。クラスタ化インデックスは、アクセス速度を大幅に向上させますが、その利点が得られるのは、通常、データ アクセスがクラスタ化インデックスの同順または逆順で連続的に実行される場合や、ある範囲の項目が選択される場合に限られます。
  • [重複キーを無視]IGNORE_DUP_KEY): 複数行に影響を与えるデータを追加または更新して重複キーを作成しようとすると(INSERT または UPDATE 文を使用)、重複を発生させる行は追加されません。更新時はその行が破棄されます。
  • [ソート/事前にソート]SORTED_DATA): インデックスが再構築される際にデータがソートされます。
  • [非ユニーク クラスタ オプション]:  重複行の処理方法を選択します。
  • [重複行を無視]IGNORE_DUP_ROW): データ セットから重複行を取り除きます。重複行を作成する INSERT または UPDATE 操作はすべてキャンセルされます。ただし、トランザクション全体はロールバックされません。
  • [重複行を許可]ALLOW_DUP_ROW): 非ユニーク クラスタ化インデックスを、重複行を含むテーブルに新しく作成できます。テーブルに存在する非ユニーク クラスタ化インデックスが、allow_dup_row オプションを使用せずに作成されている場合、INSERT または UPDATE コマンドを使用して重複行を新しく作成することはできません。
  • [なし]: [重複行を無視]または[重複行を許可]のいずれも選択しない場合、重複行を含むテーブルにインデックスを作成することはできません。また、インデックスが存在するテーブルに重複行を挿入することもできません。

[ストレージ]タブ

選択したデータベース プラットフォームに基づき、さまざまなストレージ オプションを選択できます。詳細は、「インデックス ストレージの定義」を参照してください。

[パーティション]タブ

選択したデータベース プラットフォームに基づき、さまざまなストレージ オプションを選択できます。詳細は、「テーブル インデックスのパーティション化」を参照してください。

[比較オプション]タブ

比較とマージ ユーティリティで無視する相違点を選択します。

[アタッチメントのバインド]タブ

アタッチメント(外部情報)をインデックスにバインドします。また、オブジェクトからアタッチメントを削除したり、アタッチメントのバインドのデフォルト値を上書きしたり、バインドされたアタッチメントの位置を変更することもできます。選択したアタッチメントのグリッド(画面の右側)に移動したアタッチメントの値をオーバーライドするには、対象となるアタッチメントの[値]フィールドをダブルクリックします。アタッチメントのデータ型に応じて、[上書き値エディタ]またはリスト ボックスが表示されます。アタッチメントは、[データ ディクショナリ]タブの[アタッチメント]フォルダに作成されます。詳細は、「データ モデルへの外部ドキュメントの関連付け」を参照してください。

関連項目