Entity Framework-인덱스

인덱스는 테이블과 뷰를 기반으로하는 온 디스크 데이터 구조입니다. 인덱스를 사용하면 대부분의 경우 데이터를 더 빠르고 효율적으로 검색 할 수 있습니다. 그러나 인덱스가있는 테이블 또는 뷰를 오버로드하면 삽입 또는 업데이트와 같은 다른 작업의 성능에 좋지 않은 영향을 미칠 수 있습니다.

  • 인덱싱은 데이터베이스에서 데이터를 쿼리하는 데 필요한 시간을 줄여 Code First 애플리케이션의 성능을 향상시킬 수있는 엔티티 프레임 워크의 새로운 기능입니다.

  • 다음을 사용하여 데이터베이스에 색인을 추가 할 수 있습니다. Index 속성을 사용하고 기본값을 재정의합니다. UniqueClustered 시나리오에 가장 적합한 인덱스를 얻기위한 설정.

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가 열의 고유성을 추론 할 수 있다는 것을 의미하지는 않습니다.이 기능은 일반적으로 "고유 제약"에 대한 지원이라고합니다.