J'ai une table avec plus de 20 millions de lignes et quand je le fais:
DELETE [Table] WHERE ID = ?
3 Réponses :
Cela dépend de beaucoup de facteurs que vous ne nous parlez pas de ... P>
Combien de lignes sont supprimées? strong> Plus de rangées signifie évidemment plus de temps. P>
y a-t-il d'autres index? strong> Chaque index doit être mis à jour, pas seulement le regroupement. Si vous supprimez à travers 10 index, cela prendra environ 10 fois de temps (très grossièrement). P>
y a-t-il une autre activité? strong> S'il y a des mises à jour ou des insertions qui se produisent, il y a très probablement des attentes et des contentions. p>
Également très généralement parlant, le nombre de secondes qu'une opération prend est
En plus des points fins, JNK inclus dans leur réponse, un tueur particulier que j'ai vu est lorsque vous supprimez les lignes de la table référencée pour une ou plusieurs contraintes de clé étrangère et la ou les colonnes de référencement de la La ou les table (s) de référencement ne sont pas indexées - vous forcez une analyse de table sur chacune de ces tables à repasser avant que la suppression ne puisse être acceptée. P>
Le problème était que les indices sur lesquels des tableaux relatifs n'avaient pas d'index sur la clé étrangère. Cela a fait de la suppression lente. Index créé sur toutes les tables associées pour la colonne de la clé étrangère et Supprimer a pris 0 secondes.
Yup, ajout d'un index fait toute la différence avec notre problème. Mais ironiquement, cela a tout simplement fonctionné "Statistiques de mise à jour [nom de la table]". Ça vaut le coup d'essayer.
Essayez également de supprimer des données dans un lot. Exemple
Cela améliore la concurrence en réduisant le temps de verrouillage et la conflit pour les tableaux / index. Cela n'améliore probablement pas cependant.