Récemment, un ami m'a demandé, il a dit qu'il était très lent pour lui de supprimer des millions, voire des dizaines de millions de données dans SQLSERVER. Je l'ai aidé à les analyser et j'ai fait quelques suggestions comme suit. Cela peut être utile à de nombreuses personnes, et c'est le cas. aussi très long. Je n'ai pas encore écrit de blog, discutons-en ensemble.
Si votre espace disque est petit et que vous ne souhaitez pas définir le journal de la base de données au minimum (car vous souhaitez que les autres journaux normaux le soient toujours). enregistré), et vous avez des exigences de vitesse relativement élevées et effacez toutes les données, je vous suggère d'utiliser turncate table1, car tronquer est une opération DDL, elle ne génère pas de restauration, et elle est plus rapide si elle n'écrit pas de journaux, puis s'il y en a. est un incrément automatique, il sera restauré à 1 et la suppression générera une restauration. Si vous supprimez une table avec une grande quantité de données, la vitesse sera très lente, elle occupera beaucoup de segments de restauration, et également. enregistrer les journaux de niveau G ; bien sûr, que se passe-t-il s'il y a des suppressions conditionnelles telles que "where time<'2006-3-10" ? Puis-je utiliser la suppression sans journalisation ? La réponse est non, le moteur SQL Server est conçu pour enregistrer la suppression. opérations. Jusqu'à présent, il n'existe aucun moyen de forcer certaines instructions à ne pas être enregistrées dans le journal. Si la suppression de la table 1 où l'heure < '2006-3-10' est exécutée, l'enregistrement du journal sera très volumineux (3-4G) car il y en a beaucoup. Si possible, je suggère la méthode suivante :
sélectionnez les enregistrements que vous devez conserver dans une nouvelle table. Si vous utilisez le mode de récupération complète
En fonction du nombre d'enregistrements SELECT INTO, le journal peut être plus volumineux.
Sélectionnez * dans Table2 From Table1 Where Time > = '2006-03-10'
, puis tronquez directement Table1. Aucune journalisation n'aura lieu quel que soit le modèle de récupération
Tronquer la table Table1
et enfin renommer Table2 en Table1
EC sp_rename 'Table2', 'Table1'
Source : BLOG : colonne de Domino