制約を設定している場合は、自動的にインデックスが作成されます。KEY制約の場合には「クラスター化インデックス」、UNIQUE制約の場合には「非クラスター化インデックス」が作成されて、インデックスの名前は制約の名前と同じになります。1件の検索結果が返ります。インデックスは、大量のデータの中から数件のデータを取り出すときに最も効果を発揮するので、一意な値を持つ列に対して作成されたインデックスは、最も効果があります。主キーは検索条件としても頻繁に使用されるものなので、インデックスが自動的に作成されることはうれしいことです。エディターへ次のように入力して、「社員番号」列を主キーとする「社員2」という名前のテーブルを作成します。エクスプローラーで、「社員2」テーブルの[インデックス]フォルダーを展開して、「PK_社員2_~(クラスター化)」というインデックスが作成されていることを確認してみましょう。クラスター化がある場合の非クラスター化インデックスの内部構造ここでは、クラスター化インデックスと非クラスター化インデックスの両方が存在する場合について説明します。クラスター化インデックスを作成すると、非クラスター化インデックスの構造が変更され、リーフレベルへ格納されるポインターが「行識別子」から「クラスター化インデックスの値」へ変更されます。社員テーブルの「社員番号」列へクラスター化インデックスを作成し、「姓」列に、非クラスター化インデックスを作成している場合は、次の図のようなインデックス構造になります。このような構造になるメリットは、「姓」と「社員番号」列のみを取得する検索を非常に高速に取得できるようになる点です。Tryまずは、「姓」列へ作成していたクラスター化インデックスを削除します。次に、「社員番号」列に対してクラスター化インデックスを作成します。社員(社員番号)続いて、「姓」列に対して非クラスター化インデックスを作成します。社員(姓)次に、「Aoki」さんの「社員番号」と「姓」列のみを取得するようにデータを検索してみましょう。実行されたことを確認できます。Lookupアイコンが表示されないことがポイントです。検索が完了しているのです(検索が高速に実行できています)。続いて、「社員番号」と「姓」列以外の列として「名」列も取得してみましょう。'Aoki'今度は、グラフィカル実行プランに「キー参照」アイコンが表示されます。同様に、実際のデータを参照したという内部動作です。キー参照へ変わったのは、実際のデータへのポインターがクラスター化インデックスの値(キー)に変更されたためです。レベルに格納されていないので、取得するには、実データへアクセスしなければなりません。Seekのみで完了する、つまり検索をインデックスのみでカバーするテクニックです。試した次の検索は、「名」列のデータを取得するために、「キー参照」が行われていました。レベルへ「名」列の値を格納できるようになるので、実際のデータを探す(キー参照をする)ことなく、インデックスのみで検索を完了させることができます。これにより、パフォーマンスを向上させることができます。ステートメントを次のように利用します。ページへ含めることができるようになります。エクスプローラーから作成する場合は、次のように操作します。インデックスを作成することができます。インデックスを作成してみましょう。「姓」列へ作成していた非クラスター化インデックスを削除します。インデックスを作成してみましょう。名)作成が完了したら、姓が「Aoki」さんの「社員番号」と「姓」、「名」列を取得する検索を実行してみましょう。インデックスを作成するときは、列の順番に注意する必要があります。指定する場合では、構造が異なります。句の検索条件で指定される列を、一番左へ指定しておくようにします。レベルへ格納されますが、その分余計にディスク領域を消費することにも注意する必要があります。サイズが大きい場合には要注意です。サイズが増える分だけ大きくなります。ページにも格納されます。ページには、行識別子(RID)またはクラスター化インデックスのキー値も格納されます。サイズが大きくなってしまい、パフォーマンスの低下に繋がるケースがあります。付加列インデックスの場合は、次のように中間とルートへ値を格納することなく、リーフのみへ値を格納できるようになります。インデックスの欠点を補うために搭載された機能です。違いは、前のページにも掲載しましたが、次の図のとおりです。レベルにしか値を格納しません。サイズを小さくすることができます。少なくできるので、パフォーマンスが向上します。インデックス(複合インデックス)の欠点を補った機能なので、どちらを利用するかを迷ったら、迷わず付加列インデックスを利用することをお勧めします。ステートメントを次のように利用します。キーワードを付けて、含めたい列をカッコ内へ記述します。エクスプローラーから作成する場合は、次のように操作します。[新しいインデックス]ダイアログで、インデックスを作成する列を追加したあとに、次のように[含まれている列]タブをクリックして開きます。Tryそれでは、付加列インデックスを作成してみましょう。インデックス「index_姓名」を削除します。次に、「姓」列に対して、「名」列を含む付加列インデックスを作成します。インデックスのときと同じ検索を実行してみましょう。実行されたことを確認できます。ページ)を参照すると、次のようになります。ページにも、「名」列が含まれていることを確認できます。これに対して、付加列インデックスの中身を参照すると、次のようになります。付加列インデックスの場合は、「名」列が含まれていないことを確認できます。インデックスよりも、インデックスのサイズを小さくすることができます。この差はデータのサイズが大きければ大きいほど差が顕著になります。少なくできるので、付加列インデックスの方がパフォーマンスを向上させることができます。(8)自己紹介minminnana地方でSE(プログラマ)をやって20年。気づけばいつの間にやら窓際人生。このまま余生を過ごすには若干心残りな2児と2匹(ウサギ、犬)の父。SEと言っても窓際なのでブログやWEBなどにはめっぽう疎い・・・。独学で.NET系を弄ってみるがCOBOLプログラマーにはだいぶ敷居が高い。