Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Des index clusterisés sur des colonnes sans identité pour accélérer les insertions en masse ?

Eh bien, je l'ai mis à l'épreuve, et mettre un index clusterisé sur les deux colonnes "définissant le morceau" augmente les performances de ma table.

L'insertion d'un morceau est maintenant relativement rapide par rapport à la situation où j'avais une clé IDENTITY en cluster, et à peu près aussi rapide que lorsque je n'avais pas d'index en cluster. La suppression d'un segment est plus rapide qu'avec ou sans index clusterisé.

Je pense que le fait que tous les enregistrements que je souhaite supprimer ou insérer soient garantis tous ensemble sur une certaine partie du disque dur rend les tables plus rapides - cela me semblerait logique.

Mettre à jour :Après un an d'expérience avec cette conception, je peux dire que pour que cette approche fonctionne, il est nécessaire de programmer une reconstruction régulière de tous les index (nous le faisons une fois par semaine). Sinon, les index se fragmentent très rapidement et les performances sont perdues. Néanmoins, nous sommes en train de migrer vers une nouvelle conception de base de données avec des tables partitionnées, qui est fondamentalement meilleure à tous points de vue - à l'exception du coût de la licence Enterprise Server, mais nous l'avons déjà oublié maintenant. Au moins je l'ai.