2010-06-01 9 views
4

Je suis sur le point d'exécuter une insertion de données massive dans ma base de données. J'ai réussi à déterminer comment activer et reconstruire des index non clusterisés sur mes tables, mais je souhaite également désactiver/activer les clés primaires car je pense que cela accélérera le processus d'insertion.Désactivation de la clé primaire et réactivation après l'insertion SQL en bloc

NOTE: Ce est sur de nombreuses tables et donc je suppose que je dois une boucle pour obtenir l'information clé primaire et exécutez la commande suivante pour le laisser tomber, mais je ne suis pas sûr de le recréer:

ALTER TABLE Table1 
DROP CONSTRAINT PK_Table1_Col1 

Répondre

8

Les index cluster IIRC ne peuvent pas être désactivés car ils régissent l'emplacement où les données réelles sont stockées dans les pages.

Je suis sûr que vous devriez laisser tomber la clé et la recréer après votre insertion. En fonction de la taille des tables, des index et de l'insertion, cela peut ne pas vous faire gagner du temps.

+0

j'avais l'impression que la désactivation des index avant d'énormes insertions et les aurait ensuite être réactivation d'un meilleur processus – Jon

+4

Oui pour les index non-cluster Je crois qu'il est. Mais en supprimant et en recréant un index clusterisé, il se peut que cela ne soit pas aussi bénéfique. recréer l'index clusterisé réorganise ensuite toutes les données au niveau de la page? – codingbadger

+0

Avec un index clusterisé, les données sont réellement stockées dans l'index. La suppression de l'index efface donc la table. Ainsi, supprimer un index clusterisé signifie créer une nouvelle table sans l'index et copier toutes les données dans cette nouvelle table, puis supprimer l'original et renommer le nouveau. Tout un processus. – Cobusve

4
Run This : 
//For disable all constraint of your all tables 
exec sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' 
//Your insert query here ...................... 
//After Insert Enable all the constraint 
exec sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'