2010-10-07 9 views
2

J'ai une table qui contient plus de 380 millions d'enregistrements. J'ai une procédure stockée qui:La suppression de données dans une table de serveur SQL prend beaucoup de temps

  1. Supprime certains enregistrements.
  2. Insérer quelque chose.

La procédure totale prend environ 30 minutes à exécuter. Sur ce DELETE prend 28 minutes.

Supprimer est une déclaration simple, quelque chose le long de ces lignes:

Delete a where condition_1 AND condition_2 AND condition_3 

Quelqu'un peut-il me aider?

+2

Toute suppression triggers sur la table? –

Répondre

2

Tout d'abord, jetez un oeil à votre indexing et la requête .. il devrait vraiment en premier lieu de ne pas prendre 28 mins?

Il peut être utile de jeter un coup d'œil à database tuning et query optimization ... vous pouvez peut-être essayer de supprimer des enregistrements incrementally..something suggéré here ..

+0

Salut Misnomer, Pouvez-vous s'il vous plaît me dire comment cette approche ioncremental est utile.Par rapport à l'unique? ... S'il vous plaît voir mon post à ce sujet: http: //stackoverflow.com/questions/3893216/incremental-delete -comment c'est bénéfique – Relativity

0

Il peut être utile d'indexer les champs dans la condition. Si vous créez une vue des lignes que vous voulez supprimer, combien de temps cela prend-il? Si vous pouvez accélérer une vue, vous pouvez accélérer la suppression.

2

Les conditions sont-elles trop grandes? Peut-être que l'utilisation de l'index pourrait aider à supprimer plus rapidement. Ou, vous pouvez utiliser truncate au lieu de supprimer.

CREATE [UNIQUE] INDEX indexName 
ON table 
(fieldName [ASC/DESC], ...) 

L'option ASC/DESC peut définir un ordre

+0

La condition n'est pas plus grande ... juste en comparant EX: c_number = '01102'. Je ne peux pas tronquer ... parce que je ne supprime pas toutes les données dans ce tableau. – Relativity

8

Comment est votre table organisé? quel index cluster vous avez et quels index non cluster vous avez? Et quelles sont exactement les 3 conditions?

Un DELETE se comporte comme un SELECT en ce qu'il doit trouver les lignes qui peuvent être supprimées. Pour ce faire, il utilisera les mêmes techniques qu'un SELECT, et si votre condition_1, condition_2 et condition_3 n'ont pas d'index de couverture, ils déclencheront un scan de table qui sera chronométré par la taille des données (380M) .

Questions connexes