ジオデータベースでの属性インデックス

ArcGIS は、インデックスを使用して、データをすばやく特定します。 属性インデックスを使用して属性検索に一致するレコードを特定し、空間インデックスを使用して空間検索に一致するフィーチャを特定します。

属性インデックスを使用して、テーブル、フィーチャクラス、シェープファイル、または属性リレーションシップ クラスでの結合やその他の属性検索を高速化することができます。 属性インデックスは、ArcGIS がテーブルからレコードを取得するときに使用するもう 1 つの方法です。 ほとんどの種類の属性検索では、テーブル全体のレコードを最初から最後まで検索するよりも、インデックスを使用してレコードを検索するほうが高速です。

テーブル、フィーチャクラス、シェープファイル、または属性リレーションシップ クラスにデータを設定したら、 頻繁に検索する列に属性インデックスを作成できます。 値が一意またはほぼ一意である列にインデックスを作成することをおすすめします。

インデックスを追加するたびに、フィーチャクラスまたはテーブルへの編集の処理速度がわずかに低下します。 属性インデックスを含むフィーチャクラスまたはテーブルを編集するたびに、ArcGIS またはデータベース管理システム (DBMS) はインデックスを更新します。 検索されるよりも頻繁に編集される列や、個別値がほどんどない列でのインデックスの作成は避けます。これらのインデックスは、パフォーマンスに悪影響を及ぼす可能性があるためです。 たとえば、値として Yes または No だけが含まれている列に対してインデックスを作成しても、検索のパフォーマンスは向上しません。

属性インデックスは、ArcGIS Pro[プロパティ] ダイアログ ボックスで作成するか、属性インデックスの追加ジオプロセシング ツールを使用して作成できます。 一度追加したインデックスは、いつでも削除して、再度追加することができます。

属性インデックスは単一の列または複数の列に対して作成することができ、一意に保つことができます。また、一部のジオデータベースでは、昇順または降順で作成することができます。 このヘルプ ページでは、これらの概念を簡単に説明します。 エンタープライズ ジオデータベースでインデックスを使用することにした場合、詳細な手順については DBMS のドキュメントをご参照ください。

カタログ ウィンドウでの属性インデックスの作成

属性インデックスをテーブル、フィーチャクラス、シェープファイル、または属性リレーションシップ クラスの 1 つまたは複数の列に対して作成するには、[カタログ] ウィンドウでその名前を右クリックし、[プロパティ] ダイアログ ボックスを表示します。

注意:

ArcGIS Pro で属性テーブルを開くと、インデックスが作成されている列の名前にアスタリスク (*) が表示されます。

  1. [カタログ] ウィンドウで、インデックスを作成するテーブル、フィーチャクラス、シェープファイル、または属性リレーションシップ クラスを右クリックし、[プロパティ] をクリックします。
  2. [インデックス] タブをクリックします。

    [属性インデックス] セクションに、このデータセットの既存のインデックスが表示されます。

    注意:

    ArcGIS でテーブルまたはフィーチャクラスを作成すると、ArcGIS は一意のインデックスを Object ID 列に追加します。 インデックスの名前は、ファイル ジオデータベースとモバイル ジオデータベースでは FDO_OBJECTID になり、 エンタープライズ ジオデータベースでは、r_#_sde_rowid_uk になります。 インデックスは、ジオデータベースで各フィーチャまたは行を一意に識別するために使用され、削除することはできません。

  3. 属性インデックスを追加するには、[追加] をクリックします。
  4. [名前] に、新しいインデックスの名前を入力します。
  5. 必要に応じて、フィールド値が一意である場合は、[一意の値] チェックボックスをオンにします。 昇順のインデックスを作成する場合は、[昇順] チェックボックスをオンにします。

    [一意の値] 設定と [昇順] 設定は、ファイル ジオデータベースで使用されないため、オフにしたままにします。

  6. [利用可能なフィールド] リストから、このインデックスを構築する列をクリックし、矢印をクリックして、この列を [選択フィールド] リストへ移動します。

    インデックスを複数の列に適用するには、インデックスを構築する列ごとにこの手順を繰り返します。

  7. 必要に応じて、複数の列を選択した場合は、上向き/下向き矢印を使用して、インデックスでの列の順番を変更します。

    使用する順番を決定する方法については、下記の「シングルフィールドまたはマルチフィールド インデックス」セクションをご参照ください。

  8. [OK] をクリックして、インデックスを構築します。
  9. [OK] をクリックして、[プロパティ] ダイアログ ボックスを閉じます。

ジオプロセシング ツールを使用した属性インデックスの作成

データ管理ツールボックスのインデックス ツールセットには、属性インデックスの作成用と削除用の 2 つの属性インデックス ツールがあります。

データ管理ツールボックスのインデックス ツールセット

[属性インデックスの追加 (Add Attribute Index)] ツールは、既存のテーブル、フィーチャクラス、または属性リレーションシップ クラスにシングルまたはマルチフィールドのインデックスを追加します。

[属性インデックスの削除 (Remove Attribute Index)] ツールは、テーブル、フィーチャクラス、または属性リレーションシップ クラスからシングルフィールドまたはマルチフィールド インデックスを削除します。

属性インデックスの名前

インデックスに名前を付ける際には、インデックスの対象となるテーブルや列を反映した名前を付けると効果的です。 ただし、インデックスが付いているテーブルの名前が変更された場合、インデックス名がそのテーブルを示さなくなる可能性があります。 一部の組織では、名前の先頭または末尾に IDX を付けるなど、インデックスにインデックスであることを示す名前を付けています。 たとえば、Addresses テーブルのインデックスに ADRS_APK_IDX という名前を付けることができます。ADRS は、このインデックスが Addresses テーブルのインデックスであることを示し、APK はインデックスが付いている列を示し、IDX はそれがインデックスであることを示します。

テーブル名と同様に、ジオデータベースのインデックス名には次の命名規則があります。

  • データベースにおいて一意でなければなりません。
  • 英字で始まらなければなりません。
  • スペースを含めることはできません
  • 予約語を含めることはできません。

ファイル ジオデータベースの属性インデックスの命名については、特に制限はありません。

ArcGIS では、属性インデックスの名前の長さが 16 文字に制限されています。

一意なインデックス

列の各属性値が一意である場合は、インデックスを一意として作成できます。 これにより、データベースは最初に一致する値が見つかった時点で検索を中止できるため、この属性列に対する検索の実行時間が短縮されます。

複数の列に対して定義される場合、すべての列にわたる値の組み合わせが一意である場合に、一意なインデックスを作成することができます。

注意:

ユーザー定義列に一意なインデックスを持つフィーチャクラスがフィーチャ データセットに含まれている場合、そのフィーチャ データセットの他のフィーチャクラスを編集することはできません。

昇順または降順インデックス

インデックスを作成する際には、昇順または降順としてインデックスを作成できます。 昇順インデックスとは、昇順で管理されるインデックスです。 たとえば、昇順インデックスでは、都市名の値が AthensBerlinLondonParis の順に表示され、降順インデックスでは、ParisLondonBerlinAthens の順に表示されます。

ほとんどの場合、インデックスが管理される方法によって取得の速度に差が出ることはほとんどあるいはまったくありません。ほとんどの検索では、インデックスを前方または後方のどちらにトラバースしても、効率は変わりません。

シングルフィールドまたはマルチフィールド インデックス

ジオデータベースでは、シングルフィールドまたはマルチフィールドのインデックスを作成することができます。 マルチフィールド インデックスは、検索時に 2 つ以上の列を指定することが多い場合に役立ちます。 この場合、マルチフィールド インデックスによる検索はシングルフィールド インデックスよりも 2 ~ 3 倍高速です。

マルチフィールド インデックスでの列の順序は重要です。 マルチフィールド インデックスが列 A、列 B の順に構成されている場合、最初の検索では列 A が使用されます。 また、このようなインデックスは、列 B のみが関与する検索よりも、列 A のみが関与する検索で威力を発揮します。

マルチフィールド インデックスとシングルフィールド インデックスのどちらを作成すべきか、またはそれらを組み合わせるべきかどうかの決断には、次の例に示すように、トレードオフが伴います。

列 A のみを検索したり、列 B のみを検索したり、両方の列を検索したりすることがある場合は、次のいずれかの方法を選択することができます。

  • 列 A と列 B に別々のインデックスを作成します。
  • 列 A と列 B にマルチフィールド インデックスを作成します。 両方の列が関与する検索では、一般に、このインデックスを使用するほうが効率的です。 列 A のみが関与する検索では、このインデックスよりも列 A のシングルフィールド インデックスのほうが効率的です。 列 B のみが関与する検索では、このインデックスはあまり効果的ではありません。 これを補足するために、列 B に追加のインデックスを作成することができます。
  • 3 つのインデックス (列 A のインデックス、列 B のインデックス、列 A と列 B のマルチフィールド インデックス) をすべて作成します。 3 種類の検索が同じように実行されていて、テーブルの更新よりも検索のほうがはるかに多い場合には、この方法が適しています。