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

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 種類の検索が同じように実行されていて、テーブルの更新よりも検索のほうがはるかに多い場合には、この方法が適しています。