エンティティフレームワーク-インデックス

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

  • インデックス作成はエンティティフレームワークの新機能であり、データベースからデータをクエリするために必要な時間を短縮することで、CodeFirstアプリケーションのパフォーマンスを向上させることができます。

  • を使用してデータベースにインデックスを追加できます 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が関係などを処理するときに列の一意性について推論できることを意味するものではありません。この機能は通常、「一意の制約」のサポートと呼ばれます。