Entity-framework-index

提供:Dev Guides
移動先:案内検索

Entity Framework-インデックス

インデックスは、テーブルとビューに基づくディスク上のデータ構造です。 ほとんどの場合、インデックスを使用すると、データをより高速かつ効率的に取得できます。 ただし、テーブルまたはビューにインデックスをオーバーロードすると、挿入や更新などの他の操作のパフォーマンスに不快な影響を与える可能性があります。

  • インデックス作成はエンティティフレームワークの新しい機能であり、データベースからデータをクエリするために必要な時間を短縮することでCode Firstアプリケーションのパフォーマンスを向上させることができます。
  • Index 属性を使用してデータベースにインデックスを追加し、デフォルトの Unique および Clustered 設定をオーバーライドして、シナリオに最適なインデックスを取得できます。

CourseIDのCourseクラスにIndex属性が追加されている次のコードを見てみましょう。

public partial class Course {

   public Course() {
      this.Enrollments = new HashSet<Enrollment>();
   }

   [Index]
   public int CourseID { get; set; }
   public string Title { get; set; }

   public int Credits { get; set; }
   public byte[] VersionNo { get; set; }

   public virtual ICollection<Enrollment> Enrollments { get; set; }

}

上記で作成されたキーは、一意ではなく、クラスタ化されていません。 これらのデフォルトをオーバーライドするために利用可能なオーバーロードがあります-

  • インデックスをクラスター化インデックスにするには、IsClustered = trueを指定する必要があります
  • 同様に、IsUnique = trueを指定して、インデックスを一意のインデックスにすることもできます

インデックスがクラスター化され、一意である次のC#コードを見てみましょう。

public partial class Course {

   public Course() {
      this.Enrollments = new HashSet<Enrollment>();
   }

   [Index(IsClustered = true, IsUnique = true)]
   public int CourseID { get; set; }
   public string Title { get; set; }

   public int Credits { get; set; }
   public byte[] VersionNo { get; set; }

   public virtual ICollection<Enrollment> Enrollments { get; set; }
}

インデックス属性を使用して、データベースに一意のインデックスを作成できます。 ただし、これはEFが関係などを扱うときに列の一意性について推論できることを意味しません。 この機能は通常、「固有の制約」のサポートと呼ばれます。