Entity Framework - Indice

Un indice è una struttura di dati su disco basata su tabelle e viste. Gli indici rendono il recupero dei dati più veloce ed efficiente, nella maggior parte dei casi. Tuttavia, il sovraccarico di una tabella o una vista con gli indici potrebbe influire in modo spiacevole sulle prestazioni di altre operazioni come inserimenti o aggiornamenti.

  • L'indicizzazione è la nuova funzionalità in entity framework in cui è possibile migliorare le prestazioni dell'applicazione Code First riducendo il tempo necessario per eseguire query sui dati dal database.

  • Puoi aggiungere indici al tuo database usando il Index attributo e sovrascrivere il valore predefinito Unique e Clustered impostazioni per ottenere l'indice più adatto al tuo scenario.

Diamo un'occhiata al codice seguente in cui l'attributo Index viene aggiunto nella classe Course per CourseID.

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; }

}

La chiave creata sopra è non univoca, non in cluster. Sono disponibili sovraccarichi per sovrascrivere questi valori predefiniti:

  • Per rendere un indice un indice cluster, è necessario specificare IsClustered = true

  • Allo stesso modo, puoi anche rendere un indice un indice univoco specificando IsUnique = true

Diamo un'occhiata al seguente codice C # in cui un indice è clusterizzato e univoco.

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; }
}

L'attributo Index può essere utilizzato per creare un indice univoco nel database. Tuttavia, questo non significa che EF sarà in grado di ragionare sull'unicità della colonna quando si tratta di relazioni, ecc. Questa caratteristica è generalmente indicata come supporto per "vincoli unici".