web-dev-qa-db-fra.com

Différence entre drop table et truncate table?

J'ai construit des tables dans le cadre de la synthèse de mon rapport. Je n'ai pas du tout besoin après. Quelqu'un a mentionné de les tronquer car cela serait plus rapide. 

66
Brian G

La suppression d'enregistrements d'une table enregistre chaque suppression et exécute des déclencheurs de suppression pour les enregistrements supprimés. Truncate est une commande plus puissante qui vide une table sans enregistrer chaque ligne. SQL Server vous empêche de tronquer une table avec des clés étrangères qui y font référence, en raison de la nécessité de vérifier les clés étrangères sur chaque ligne.

Truncate est normalement ultra-rapide, idéal pour nettoyer les données d'une table temporaire. Cela préserve la structure de la table pour une utilisation future.

Si vous voulez réellement supprimer la table définitions ainsi que les données, supprimez simplement les tables.

Voir cet article MSDN pour plus d'informations

87
JoshL

DROP TABLE supprime la table.

TRUNCATE TABLE le vide, mais laisse sa structure pour les données futures.

74
ceejayoz

DROP et TRUNC font des choses différentes:

TABLE TRUNCATE

Supprime toutes les lignes d'une table sans enregistrement des suppressions de lignes individuelles . TRUNCATE TABLE est similaire au Instruction DELETE sans clause WHERE; Cependant, TRUNCATE TABLE est plus rapide et utilise moins de journal système et de transactions Ressources.

TABLE DROP

Supprime une ou plusieurs définitions de table et toutes les données, index, déclencheurs, contraintes et permission spécifications pour ces tables.

En ce qui concerne la vitesse, la différence devrait être faible. Et de toute façon, si vous n'avez pas du tout besoin de la structure de la table, utilisez certainement DROP.

24
daremon

Je pense que vous voulez dire la différence entre DELETE TABLE et TRUNCATE TABLE.

TABLE DROP  

supprimer la table de la base de données.

SUPPRIMER TABLE  

sans condition supprimer toutes les lignes. S'il existe des déclencheurs et des références, cela sera traité pour chaque ligne. De plus, un index sera modifié s'il y en a un.

TABLE TRUNCATE  

définir le nombre de lignes zéro et sans enregistrer chaque ligne. Que c'est beaucoup plus rapide que l'autre à la fois.

18
Horcrux7

Aucune de ces réponses n'indique une différence importante entre ces deux opérations. La table de dépôt est une opération qui peut être annulée. Cependant, tronquer ne peut pas être annulé ['TRUNCATE TABLE' peut également être annulé]. De cette manière, la suppression d'une très grande table peut s'avérer très coûteuse s'il y a plusieurs lignes, car elles doivent toutes être enregistrées dans un espace temporaire au cas où vous décidiez de l'annuler.

D'habitude, si je veux me débarrasser d'une grande table, je la tronquerai, puis la laisserai tomber. De cette façon, les données seront nixées sans enregistrement et la table pourra être supprimée. Cette suppression sera très peu coûteuse car aucune donnée ne doit être enregistrée.

Il est important de souligner que tronquer supprime simplement les données en laissant la table, tandis que drop supprimera en fait les données et la table elle-même. (en supposant que les clés étrangères n'excluent pas une telle action)

9
Nathan Feger

TRUNCATE TABLE conserve toutes vos anciennes indexations, et cetera. DROP TABLE supprimerait évidemment le tableau et vous demanderait de le recréer plus tard.

4
Kevin Fairchild

DELETE TableA au lieu de TRUNCATE TableA? Une idée fausse commune est qu'ils font la même chose. Nonso. En fait, il y a beaucoup de différences entre les deux.

DELETE est une opération journalisée ligne par ligne. Cela signifie Que la suppression de chaque ligne est enregistrée et physiquement supprimée.

Vous pouvez supprimer n'importe quelle ligne qui ne violera pas une contrainte, tout en laissant la clé étrangère ou toute autre contrainte en place.

TRUNCATE est également une opération journalisée, mais d’une manière différente. TRUNCATE enregistre la désallocation des pages de données dans lesquelles les données Existent. La désallocation des pages de données signifie que vos lignes de données Existent toujours dans les pages de données, mais que les extensions Ont été marquées comme vides pour pouvoir être réutilisées. C’est ce qui fait que TRUNCATE est une opération plus rapide à exécuter par rapport à DELETE.

Vous ne pouvez pas TRUNCATE une table qui a des contraintes de clé étrangère Vous devrez supprimer les contraintes, TRUNCATE la table Et réappliquer les contraintes.

TRUNCATE réinitialisera toutes les colonnes d’identité sur la valeur de départ par défaut

3
Raja

Drop supprime complètement la table et supprime également la définition. Truncate vide la table mais ne supprime pas la définition.

3
DMKing

Tronquer la table vide la table. La suppression de la table la supprime entièrement. L'un ou l'autre sera rapide, mais le laisser tomber sera probablement plus rapide (selon votre moteur de base de données).

Si vous n'en avez plus besoin, déposez-le afin que votre schéma ne soit pas encombré.

3
Dan Udey

TRUNCATE TABLE est fonctionnel Identique à l'instruction DELETE avec le numéro Clause WHERE: les deux suppriment toutes les lignes de la table. Mais TRUNCATE TABLE est plus rapide et utilise moins de système et les ressources du journal des transactions que DELETE.

L'instruction DELETE supprime les lignes un à la fois et enregistre une entrée dans le journal des transactions pour chaque ligne supprimée . TRUNCATE TABLE supprime les données de désallocation des pages de données utilisées pour stocker les données de la table, et seulement le Les désallocations de pages sont enregistrées dans le fichier journal des transactions.

TRUNCATE TABLE supprime toutes les lignes d'un table, mais la structure de la table et ses colonnes, contraintes, index et ainsi de suite sur rester. Le compteur utilisé par un L'identité pour les nouvelles lignes est réinitialisée sur le graine pour la colonne. Si tu veux conserver le compteur d'identité, utilisez SUPPRIMER à la place. Si vous souhaitez supprimer définition de la table et ses données, utilisez le fichier Déclaration DROP TABLE.

Vous ne pouvez pas utiliser TRUNCATE TABLE sur un fichier table référencée par une FOREIGN KEY contrainte; utilisez plutôt DELETE déclaration sans clause WHERE . Parce que TRUNCATE TABLE n'est pas enregistré, il ne peut pas activer un déclencheur.

TRUNCATE TABLE ne peut pas être utilisé sur tables participant à un indexé vue.

De http://msdn.Microsoft.com/en-us/library/aa260621(SQL.80).aspx

2
Ricardo C

Table DROP

DROP TABLE [table_name];

La commande DROP est utilisée pour supprimer une table de la base de données. C'est une commande DDL. Toutes les lignes, les index et les privilèges de la table seront également supprimés. L'opération DROP ne peut pas être annulée.

SUPPRIMER la table

DELETE FROM [table_name]
WHERE [condition];

DELETE FROM [table_name];

La commande DELETE est une commande DML. Il peut être utilisé pour supprimer toutes les lignes ou certaines lignes de la table en fonction de la condition spécifiée dans la clause WHERE. Il est exécuté à l'aide d'un verrou de ligne, chaque ligne de la table est verrouillée pour la suppression. Il conserve le journal des transactions, il est donc plus lent que TRUNCATE . Les opérations DELETE peuvent être annulées.

Table TRUNCATE

TRUNCATE TABLE [table_name];

La commande TRUNCATE supprime toutes les lignes d'une table. Il n'enregistre pas la suppression de chaque ligne, mais la désallocation des pages de données de la table, ce qui la rend plus rapide que DELETE. Il est exécuté à l'aide d'un verrou de table et la table entière est verrouillée pour supprimer tous les enregistrements. C'est une commande DDL. Les opérations TRUNCATE ne peuvent pas être annulées.

2
Optimizer

J'ai une correction pour l'une des déclarations ci-dessus ... "tronquer ne peut pas être annulé"

Truncate peut être annulé. Dans certains cas, vous ne pouvez pas créer de table tronquée ou supprimée, par exemple, lorsque vous avez une référence de clé étrangère. Pour une tâche telle que les rapports mensuels, je supprimerais probablement la table dès que je n'en aurais plus besoin. Si je faisais ce rapport de cumul plus souvent, je garderais probablement la table à la place et utiliserais tronquer.

J'espère que cela vous aidera, voici quelques informations supplémentaires que vous devriez trouver utiles ...

Veuillez consulter l'article suivant pour plus de détails: http://sqlblog.com/blogs/denis_gobo/archive/2007/06/13/1458.aspx

En outre, pour plus de détails sur la suppression et le tronquage, consultez cet article: http://www.sql-server-performance.com/faq/delete_truncate_difference_p1.aspx

Merci! Jeff

2
Jeff

truncate supprime toutes les lignes, mais pas la table elle-même. Cela revient essentiellement à supprimer sans clause where, mais généralement plus rapidement.

2
mmaibaum

Dans le standard SQL, la table DROP supprime la table et le schéma de table - TRUNCATE supprime toutes les lignes.

2
hangy

Les réponses ici correspondent à la question, mais je vais répondre à la question que vous n'avez pas posée. "Devrais-je utiliser tronquer ou supprimer?" Si vous supprimez toutes les lignes d'une table, vous souhaiterez généralement les tronquer, car elles sont beaucoup plus rapides. Pourquoi est-ce beaucoup plus rapide? Au moins dans le cas d’Oracle, il réinitialise le high water mark . Il s’agit essentiellement d’un déréférencement des données et permet à la base de données de les réutiliser pour autre chose.

1
Dan Coates

SUPPRIMER VS TRUNCATE

  1. L'instruction DELETE supprime les lignes une par une et enregistre une entrée dans le journal des transactions Pour chaque ligne supprimée. TRUNCATE TABLE supprime les données en désallouant les données pages utilisées pour stocker les données de la table et enregistre uniquement les désallocations de page dans le journal de transactions
  2. Nous pouvons utiliser la clause WHERE dans DELETE mais dans TRUNCATE vous ne pouvez pas l'utiliser
  3. Lorsque l'instruction DELETE est exécutée à l'aide d'un verrou de ligne, chaque ligne de la table est verrouillée Pour suppression. TRUNCATE TABLE verrouille toujours la table et la page mais pas chaque ligne
  4. Après l'exécution d'une instruction DELETE, la table peut toujours contenir des pages vides. Si l'opération Delete n'utilise pas de verrou de table, la table (segment de mémoire) contiendra de nombreuses pages vides Pour les index, l’opération delete peut laisser des pages vides, bien que celles-ci
    pages seront désallouées rapidement par un processus de nettoyage en arrière-plan
  5. TRUNCATE TABLE supprime toutes les lignes d'une table, mais la structure de la table et ses colonnes, les contraintes , les index, etc. restent
  6. La déclaration DELETE ne correspond pas à la colonne RESEED mais à la déclaration TRUNCATERESEEDS de la colonne IDENTITY
  7. Vous ne pouvez pas utiliser TRUNCATE TABLE sur des tables qui:
    1. Sont référencés par une contrainte FOREIGN KEY. (Vous pouvez tronquer une table contenant une clé étrangère Qui se réfère elle-même.)
    2. Participer à une vue indexée.
    3. Sont publiés à l'aide d'une réplication transactionnelle ou d'une réplication de fusion
  8. TRUNCATE TABLE ne peut pas activer de déclencheur, car l'opération n'enregistre pas les suppressions individuelles row
1
Sasikiran

Supprimer la déclaration

Supprimer l'instruction Supprimer les lignes de la table et renvoyer le nombre de lignes est supprimé de la table. Dans cette instruction, nous utilisons la clause where pour supprimer les données de la table 

  • L'instruction Delete est plus lente que l'instruction Truncate, car elle supprimait les enregistrements un par un. 

Déclaration tronquée

Instruction Truncate Supprimée ou suppression de toutes les lignes de la table.

  • Il est plus rapide que l'instruction Delete car il a supprimé tous les enregistrements de la table. 
  • Instruction Truncate pas renvoyer le no de lignes sont supprimés de la table

Déclaration de dépôt

L'instruction de suppression a supprimé tous les enregistrements ainsi que la structure de la table 

1
Zubair Saif

Drop Drop la table entière et toute sa structure

truncate supprime toutes les lignes de la table Il est différent de supprimer car il supprime également les index des lignes.

0
ZIA

EFFACER

La commande DELETE est utilisée pour supprimer des lignes d'une table. Une clause WHERE peut être utilisée pour ne supprimer que certaines lignes. Si aucune condition WHERE n'est spécifiée, toutes les lignes seront supprimées. Après avoir effectué une opération DELETE, vous devez COMMIT ou ROLLBACK la transaction pour rendre la modification permanente ou pour l'annuler.

TRONQUER

TRUNCATE supprime toutes les lignes d'une table. L'opération ne peut pas être annulée ... En tant que tel, TRUCATE est plus rapide et n'utilise pas autant d'espace d'annulation qu'un DELETE.

De: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands

0
Mythili