2010-04-09 3 views

Répondre

2

Peut-être l'auteur avait-il l'impression que DROP TABLE serait plus rapide si la table était déjà vide et savait que TRUNCATE serait plus rapide que DELETE.

0

Peut-être pour voir si la commande TRUNCATE lève une exception en raison de clés étrangères existantes?

+0

Je suppose que ce n'est pas hors du domaine des possibilités, mais ce code particulier n'est pas dans toute sorte de bloc de gestion des erreurs –

+0

Je ne peux pas penser à une autre raison alors, sauf une mauvaise hypothèse (comme mentionné dans la réponse de CodeByMoonlight) – davek

1

Peut-être un knucklehead. (pas que je sois parfait).

1

Sur les tables temporaires très volumineuses, il est parfois plus rapide de tronquer en premier que de supprimer, car la fonction Truncate déplace simplement un pointeur. Ce n'est normalement pas nécessaire puisque les tables temporaires tombent d'elles-mêmes.

3

Une autre raison est qu'une opération DROP TABLE est une opération entièrement journalisée. Ainsi, en tronquant d'abord (ce qui n'est jamais consigné), vous diminuez la charge de journalisation transactionnelle.

+0

Semble raisonnable –

+0

J'ai appris récemment qu'un truncate est enregistré (mais pas comme une suppression est) mais je comprends votre point –

+0

Joe vous l'avez inversé. Supprimer est connecté tronqué n'est pas. +1 Alex comme je ne savais pas que drop a été enregistré (et pour moi ça n'a pas de sens). – Paparazzi

1

Une autre possibilité est que le codeur tente d'éviter une chute retardée qui se produira lorsque la table temporaire est supérieure à 8 Mo. C'est à dire. tronquez-le puis déposez-le. Je ne suis pas sûr que le moteur SQL sera dupé par cela, mais il pourrait forcer le nettoyage synchrone. Je ne vois pas pourquoi vous voudriez faire ceci, peut-être pour éviter un problème avec accumuler des baisses retardées (tables temporaires pour la destruction)

Questions connexes