Utilizzando il primo modello di codice Entity Framework 6.1, qual è il modo migliore per modificare l'indice cluster su una tabella rispetto all'impostazione predefinita ID a un altro set di colonne. Azure non consente una tabella senza un indice cluster.Come modificare un indice cluster nel modello Entity Framework 6.1 Code First e applicarlo a un database Azure
public partial class UserProfile
{
public override Guid ID { get; set; }
[Index("CI_UserProfiles_UserID", IsClustered = true)]
public Guid UserID { get; set; }
[Required]
public Guid FieldID { get; set; }
[Required]
[StringLength(400)]
public string Value { get; set; }
}
Sul tavolo UserProfiles
, ID
è già la chiave primaria e indice cluster. L'aggiunta di
[Index("CI_UserProfiles_UserID", IsClustered = true)]
a UserID crea questa migrazione:
CreateIndex("dbo.UserProfiles", "UserID", clustered: true, name: "IX_UserProfiles_UserID");
Eseguendo la migrazione genera il seguente errore:
Cannot create more than one clustered index on table 'dbo.UserProfiles'. Drop the existing clustered index 'PK_dbo.UserProfiles' before creating another.
Non sarebbe meglio aggiungere un indice non cluster su ID utente? Di solito avere il pk come indice cluster è il migliore. (Dal momento che è solitamente utilizzato in join, ecc.) – Magnus
@Magnus non la penso così. Con l'ID GUID come indice cluster, le informazioni sul profilo degli utenti saranno sparse sul disco che richiede l'accesso al disco per ogni parte delle informazioni del profilo dell'utente. Un indice cluster sull'ID utente produrrà il recupero delle informazioni del profilo utente in un potenziale accesso a un singolo disco. –
Stai dicendo che stai usando questa tabella solo per la ricerca UserId e mai con join con altre tabelle nella colonna ID? – Magnus