次の方法で共有


インデックス (Visual Database Tools)

更新 : 2007 年 11 月

インデックスを使用すると、データベース テーブルの特定の情報にすばやくアクセスできます。インデックスとは、employee テーブルの姓の列 (lname) など、データベース テーブルの 1 つ以上の列の値が順番に並べられた構造です。姓を指定して特定の従業員を検索する場合は、インデックスを使う方が、テーブルのすべての行を検索するより速く情報を取得できます。

インデックスは、テーブルの指定された列に格納されているデータ値へのポインタを設定し、指定された並べ替え順序に従ってポインタを並べ替えます。データベースは、本の索引と同じようにこのインデックスを使います。つまり、インデックスを検索して特定の値を探し出し、ポインタをたどってその値を含む行に到達します。

データベース ダイアグラムでは、選択したテーブルの[インデックス/キー] ダイアログ ボックス[XML インデックス] ダイアログ ボックスまたは[フルテキスト インデックス] ダイアログ ボックスで、各種類のインデックスを作成、編集、または削除できます。インデックスが関連付けられているテーブルを保存すると、またはそのテーブルが表示されているダイアグラムを保存すると、インデックスはデータベースに保存されます。詳細については、「インデックスの使用」を参照してください。

s2aewe8z.alert_note(ja-jp,VS.90).gifメモ :

すべてのデータベースが、同じ方法でインデックスを処理するわけではありません。詳細については、ご使用のデータベースのマニュアルを参照してください。

一般的な規則として、問い合わせを頻繁に行う列のデータについてだけ、テーブルにインデックスを作成するようにします。インデックスを作成すると、多くのディスク領域が使用されて、行の追加、削除、および更新に時間がかかるようになります。ほとんどの場合、インデックスを作成することでデータの取得が速くなる利点の方が、このような欠点を上回ります。ただし、アプリケーションが頻繁にデータを更新する場合、またはディスク容量に制約がある場合は、インデックスの数を制限する必要があります。

インデックスを作成する前に、使用する列および作成するインデックスの種類を決定します。

インデックスの列

インデックスは、データベース テーブルの 1 つの列または複数の列に基づいて作成できます。複数列のインデックスを作成すると、1 つの列では同じ値が存在する可能性のある行を区別できます。

複数の列について同時に検索または並べ替えを行うことが多い場合にも、インデックスが役に立ちます。たとえば、同じクエリの中で姓の列と名の列に対する条件を設定することが多い場合は、この 2 つの列について複数列のインデックスを作成すると便利です。

インデックスが有効かどうかを決めるには、次の点を調べます。

  • クエリの WHERE 句と JOIN 句を調べます。どちらかの句で指定されている列は、いずれもインデックスの候補になります。

  • 新しいインデックスを使ってみて、クエリを実行したときのパフォーマンスに対する効果を調べます。

  • テーブルに既に作成されているインデックスの数を確認します。1 つのテーブルにあまり多くのインデックスを作成しないようにします。

  • テーブルに既に作成されているインデックスの定義を確認します。共通の列を含むインデックスを重複して作成しないようにします。

  • 列にある重複しないデータ値の数を調べて、テーブルの行数と比較します。これにより、列がインデックスの候補になるかどうか、候補になる場合はどの種類のインデックスであるかを決定するときの参考になります。

インデックスの種類

データベースの機能に基づいて、データベース デザイナでは、一意のインデックス、主キー インデックス、およびクラスタ化インデックスという 3 種類のインデックスを作成できます。データベースでサポートされているインデックス機能の詳細については、データベースのドキュメントを参照してください。

s2aewe8z.alert_note(ja-jp,VS.90).gifヒント :

一意のインデックスは情報の検索には役に立ちますが、パフォーマンスに関して最善の結果を得るには、主キー制約または UNIQUE 制約を代わりに使うことをお勧めします。これらの制約の詳細については、「制約の使用」を参照してください。

一意のインデックス

一意のインデックスでは、2 つの行が同じインデックス値を持つことは許されません。

ほとんどのデータベースでは、新しく作成した一意のインデックスに対して既存データに重複するキー値を持つものがある場合、そのテーブルを保存することはできません。また、テーブルに重複するキー値が作成されるような新しいデータは、追加できない場合があります。たとえば、employee テーブルで従業員の姓 (lname) について一意のインデックスを作成する場合は、テーブル内に同じ姓の従業員を 2 人以上含むことはできません。

一意のインデックスの詳細については、「方法 : 一意のインデックスを作成する」を参照してください。

主キー インデックス

通常、データベース テーブルには、テーブルの各行を一意に識別する値を持つ列または列の組み合わせがあります。このような列は、テーブルの主キーと呼ばれます。

データベース ダイアグラムでテーブルに主キーを定義すると、一意のインデックスの特別な種類である主キー インデックスが自動的に作成されます。このインデックスでは、主キーの各値は一意である必要があります。クエリで主キー インデックスを使うと、データにすばやくアクセスできます。主キーの詳細については、「キーの使用」を参照してください。

クラスタ化インデックス

クラスタ化インデックスでは、テーブルの行の物理的な順序は、キー値の論理的な (インデックスの) 順序と同じです。1 つのテーブルに作成できるクラスタ化インデックスは 1 つだけです。

インデックスがクラスタ化されていない場合は、テーブル内の行の物理的な順序は、キー値の論理的な順序と一致しません。普通、クラスタ化インデックスを使う方が、クラスタ化されていないインデックスより速くデータにアクセスできます。

クラスタ化インデックスの使用方法の詳細については、「方法 : クラスタ化インデックスを作成する」を参照してください。

フルテキスト インデックス

データベース テーブルのテキスト ベースの列でフルテキスト検索を行う場合は、フルテキスト インデックスを作成します。フルテキスト インデックスは、通常のインデックスに基づくため、最初に通常のインデックスを作成する必要があります。通常のインデックスは、単一の非 null 列に作成する必要があります。大きな値を格納している列ではなく、小さな値を格納している列を選択するのが最も適切です。詳細については、「方法 : インデックスを作成する」を参照してください。

s2aewe8z.alert_note(ja-jp,VS.90).gifメモ :

フルテキスト インデックスを作成するには、SQL Server Management Studio または Enterprise Manager などの外部ツールを使用して、あらかじめカタログを作成しておく必要があります。

s2aewe8z.alert_note(ja-jp,VS.90).gifメモ :

フルテキスト インデックスの機能は、Microsoft SQL Server Express 2005 では利用できません。

XML インデックス

[XML インデックス] ダイアログ ボックスを使用すると、[インデックス/キー] ダイアログ ボックスではできない、データ型が XML の列に対するインデックスの作成を行うことができます。各 XML 列に複数の XML インデックスを作成できますが、最初に作成したインデックス (プライマリ インデックス) が他のインデックスの基になります。プライマリ XML インデックスを削除すると、他のインデックスも削除されます。XML インデックスの詳細については、「方法 : XML インデックスを作成する」を参照してください。

参照

参照

[インデックス/キー] ダイアログ ボックス

[外部キーのリレーションシップ] ダイアログ ボックス

[XML インデックス] ダイアログ ボックス

[フルテキスト インデックス] ダイアログ ボックス

その他の技術情報

インデックスの使用

キーの使用