属性インデックスの作成
ArcSDE ジオデータベースの属性インデックスの追加または変更は、ArcView では実行できません。
属性インデックスを使用して、フィーチャクラスまたはテーブルでの属性検索を高速化することができます。属性インデックスは、ArcGIS がテーブルからレコードを取得するときに使用するもう 1 つの方法です。ほとんどの種類の属性検索では、テーブル全体のレコードを最初から最後まで検索するよりも、インデックスを使用してレコードを検索するほうが高速です。
フィーチャクラスまたはテーブルにデータを設定したら、頻繁に検索するフィールドに属性インデックスを作成します。インデックスを追加するたびにフィーチャクラスへの編集が少し遅くなるため、作成するインデックスは必要最低限にしてください。また、フィーチャクラスを編集するたびに、ArcGIS がインデックスを更新する必要があります。フィールドを頻繁に編集する必要がある場合は、できればインデックスを作成しないでください。属性インデックスを作成するには、ArcCatalog のプロパティ ダイアログ ボックスにアクセスするか、ジオプロセシングを使用します。一度追加したインデックスは、いつでも削除することができ、必要に応じて再度追加することができます。
属性インデックスは複数の方法で作成することができます。属性インデックスは単一のフィールドまたは複数のフィールドに対して作成することができ、一意に保つことができます。また、一部のジオデータベースでは、昇順または降順で作成することができます。このトピックでは、これらの概念を簡単に説明します。ArcSDE ジオデータベースでインデックスを使用することにした場合、詳細な手順については DBMS のドキュメントをご参照ください。
ArcCatalog での属性インデックスの作成
属性インデックスをジオデータベース フィーチャクラスの 1 つまたは複数のフィールドに対して作成するには、カタログ ツリーでテーブル名を右クリックし、プロパティ ダイアログ ボックスを表示します。
- カタログ ツリーで、インデックスを作成するテーブルまたはフィーチャクラスを右クリックし、[プロパティ] をクリックします。
- [インデックス] タブをクリックします。
- [追加] をクリックします。
- 新しいインデックスの名前を入力します。
- フィールド値が一意である場合は、[ユニーク] チェックボックスをオンにします。昇順のインデックスを作成する場合は、[昇順] チェックボックスをオンにします。
[ユニーク] 設定と [昇順] 設定は、ファイル ジオデータベースで使用できません。[昇順] 設定は、Oracle ArcSDE ジオデータベースでは使用できません。[ユニーク] 設定と [昇順] 設定は、SQL Server ArcSDE ジオデータベースでは利用できず、表示されません。
- このインデックスを適用する 1 つ以上のフィールドをクリックします。注意:
マルチフィールドのインデックスは、ファイル ジオデータベースではサポートされません。
- 矢印ボタンをクリックして、フィールドを [選択フィールド] リストへ移動します。
- 上向き/下向き矢印を使用して、インデックスでのフィールドの順番を変更します。
- [OK] をクリックします。
- [適用] をクリックしてインデックスを構築するか、または [OK] をクリックしてインデックスを構築し、プロパティ ダイアログ ボックスを閉じます。
ジオプロセシングによる属性インデックスの作成
[データ管理 ツール] の [インデックス] ツールセットには、属性インデックスの作成と削除のための主なツールが 2 つ含まれています。
[属性インデックスの追加 (Add Attribute Index)] ツールは、既存のテーブル、フィーチャクラス、または属性リレーションシップ クラスにシングルまたはマルチフィールドのインデックスを追加します。このツールはすべての ArcGIS ライセンスで利用できます。
[属性インデックスの削除 (Remove Attribute Index)] ツールは、既存のテーブル、フィーチャクラス、または属性リレーションシップ クラスからシングルまたはマルチフィールドのインデックスを削除します。このツールもすべての ArcGIS ライセンスで利用できます。
属性インデックスの名前
ArcSDE ジオデータベースのインデックスに名前を付ける際には、インデックスの対象となるテーブルや列を反映した名前を付けると効果的です。ただし、インデックスが付いているテーブルの名前が変更された場合、インデックス名がそのテーブルを示さなくなる可能性があります。一部の組織では、名前の先頭または末尾に IDX を付けるなど、インデックスにインデックスであることを示す名前を付けています。たとえば、Addresses テーブルのインデックスに ADRS_APK_IDX という名前を付けることができます。ADRS は、このインデックスが Addresses テーブルのインデックスであることを示し、APK はインデックスが付いている列を示し、IDX はそれがインデックスであることを示します。
テーブル名と同様に、ArcSDE ジオデータベースのインデックス名には次の命名規則があります。
- データベースにおいて一意でなければなりません。
- 英字で始まらなければなりません。
- スペースを含めることはできません。
- 予約語を含めることはできません。
ファイル ジオデータベースの属性インデックスの命名については、特に制限はありません。パーソナル ジオデータベースのインデックス名には、スペースまたは予約語を含めることはできません。
ArcGIS では、属性インデックスの名前の長さが 16 文字に制限されています。この制限は、異なるジオデータベース間でのデータの分散と共有を促すために、サポート対象のデータベースで許容される最短の長さに基づいています。
一意なインデックス
[ユニーク] オプションはファイル ジオデータベースで使用されないので、オフにしたままにします。[ユニーク] オプションは SQL Server ArcSDE ジオデータベースでは利用できず、[属性インデックスの追加] ダイアログ ボックスには表示されません。
インデックスを作成する際には、一意なインデックスを作成するオプションを選択することができます。このオプションを選択するのは、各レコードの属性が一意な値を持つ場合です。これにより、データベースは最初に一致する値が見つかった時点で検索を中止できるため、この属性に対する検索が高速になります。
ただし、パーソナル ジオデータベースでは、ユーザ定義フィールドに一意なインデックスを持つフィーチャクラスを編集することはできません。また、ユーザ定義フィールドに一意なインデックスを持つフィーチャクラスがフィーチャ データセットに含まれている場合、そのフィーチャ データセットの他のフィーチャクラスを編集することもできません。パーソナル ジオデータベースで編集を開始しようすると、ArcMap から次のエラーが返されます。
「マップのレイヤは編集できません。レイヤまたはテーブルのユーザ定義列に一意なインデックスが含まれていないかどうか確認してください。」
パーソナル ジオデータベースのフィールドに一意なインデックスが設定されていて、それを編集する必要がある場合には、ArcCatalog で一意なインデックスを削除してから、一意でないインデックスとして再作成してください。
昇順インデックスと降順インデックス
[昇順] オプションはファイルまたは Oracle ArcSDE ジオデータベースで使用されないので、オフにしたままにします。[昇順] オプションは SQL Server ArcSDE ジオデータベースでは利用できず、[属性インデックスの追加] ダイアログ ボックスで無効な状態となります。
インデックスを作成する際には、昇順インデックスを作成するオプションを選択することができます。このオプションをオンにしなければ、降順インデックスが作成されます。昇順インデックスとは、昇順で管理されるインデックスです。たとえば、昇順インデックスでは、都市名が Athens、Berlin、London、Paris の順に表示され、降順インデックスでは、Paris、London、Berlin、Athens の順に表示されます。
ほとんどの場合、インデックスが管理される方法によって取得の速度に差が出ることはほとんどあるいはまったくありません。ほとんどの検索では、インデックスを前方または後方のどちらにトラバースしても、効率は変わりません。
シングルフィールド インデックスとマルチフィールド インデックス
ファイル ジオデータベースはマルチフィールド インデックスをサポートしません。[フィーチャクラス] および [テーブル プロパティ] ダイアログ ボックスではマルチフィールド インデックスを指定できません。[属性インデックスの追加] ジオプロセシング ツールと ArcObjects ではマルチフィールド インデックスの指定が可能です。作成したインデックスは、ArcCatalog の [フィーチャクラス プロパティ] または [テーブル プロパティ] ダイアログ ボックスから参照するとマルチフィールド インデックスのように表示されますが、実際には個々のフィールド上の個別のインデックスです。
パーソナルまたは ArcSDE ジオデータベースでは、シングルフィールドまたはマルチフィールドのインデックスを作成することができます。マルチフィールド インデックスは、検索時に 2 つ以上のフィールドを指定することが多い場合に役立ちます。この場合、マルチフィールド インデックスによる検索はシングルフィールド インデックスよりも 2 ~ 3 倍高速です。
マルチフィールド インデックスでのフィールドの順序は重要です。マルチフィールド インデックスが列 A、列 B の順に構成されている場合、最初の検索では列 A が使用されます。また、このようなインデックスは、列 B のみが関与する検索よりも、列 A のみが関与する検索で威力を発揮します。
マルチフィールド インデックスとシングルフィールド インデックスのどちらを作成すべきか、またはそれらを組み合わせるべきかどうかの決断にはトレードオフが伴い、これといった決まりはありません。ただし、多くの場合はさまざまな解決策があります。たとえば、列 A のみを検索する場合、列 B のみを検索する場合、および両方を検索する場合がある場合は、次のいずれかの方法を選択することができます。
- 列 A と列 B に別々のインデックスを作成します。
- 列 A と列 B にマルチフィールド インデックスを作成します。両方の列が関与する検索では、一般に、このインデックスを使用するほうが効率的です。列 A のみが関与する検索では、このインデックスよりも列 A のシングルフィールド インデックスのほうが効率的です。列 B のみが関与する検索では、このインデックスはあまり効果的ではありません。これを補足するために、列 B に追加のインデックスを作成することができます。
- 3 つのインデックス(列 A のインデックス、列 B のインデックス、列 A と列 B のマルチフィールド インデックス)をすべて作成します。3 種類の検索が同じように実行されていて、テーブルの更新よりも検索のほうがはるかに多い場合には、この方法が適しています。