Condividi tramite


Funzionalità dell'indice specifiche del provider SQL Server di Entity Framework Core

Questa pagina illustra in dettaglio le opzioni di configurazione dell'indice specifiche del provider SQL Server.

Cluster

Gli indici cluster ordinano e archiviano le righe di dati della tabella in base ai valori di chiave, La creazione dell'indice cluster corretto per la tabella può migliorare significativamente la velocità delle query, perché i dati sono già disposti nell'ordine ottimale. Per ogni tabella è disponibile un solo indice cluster, poiché alle righe di dati è possibile applicare un solo tipo di ordinamento. Per altre informazioni, vedere la documentazione di SQL Server sugli indici cluster e non cluster.

Per impostazione predefinita, la colonna chiave primaria di una tabella è supportata in modo implicito da un indice cluster e tutti gli altri indici non sono cluster.

È possibile configurare un indice o una chiave da raggruppare come segue:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>().HasIndex(b => b.PublishedOn).IsClustered();
}

Nota

SQL Server supporta solo un indice cluster per tabella e la chiave primaria è per impostazione predefinita in cluster. Se si vuole avere un indice cluster in una colonna non chiave, è necessario rendere la chiave non cluster in modo esplicito.

Fattore di riempimento

L'opzione index fill-factor è disponibile per ottimizzare l'archiviazione e le prestazioni dei dati degli indici. Per altre informazioni, vedere la documentazione di SQL Server sul fattore di riempimento.

È possibile configurare il fattore di riempimento di un indice nel modo seguente:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>().HasIndex(b => b.PublishedOn).HasFillFactor(10);
}

Creazione online

L'opzione ONLINE consente all'utente simultaneo di accedere alla tabella sottostante o ai dati dell'indice cluster e agli indici non cluster associati durante la creazione dell'indice, in modo che gli utenti possano continuare ad aggiornare ed eseguire query sui dati sottostanti. Quando si eseguono operazioni DDL (Data Definition Language) offline, ad esempio la compilazione o la ricompilazione di un indice cluster, tali operazioni mantengono blocchi esclusivi sui dati sottostanti e gli indici associati. Per altre informazioni, vedere la documentazione di SQL Server sull'opzione indice ONLINE.

È possibile configurare un indice con l'opzione ONLINE come indicato di seguito:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>().HasIndex(b => b.PublishedOn).IsCreatedOnline();
}