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.
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
DROP TABLE supprime la table.
TRUNCATE TABLE le vide, mais laisse sa structure pour les données futures.
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.
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.
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)
TRUNCATE TABLE conserve toutes vos anciennes indexations, et cetera. DROP TABLE supprimerait évidemment le tableau et vous demanderait de le recréer plus tard.
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
Drop supprime complètement la table et supprime également la définition. Truncate vide la table mais ne supprime pas la définition.
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é.
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
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.
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.
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.
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
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.
Dans le standard SQL, la table DROP supprime la table et le schéma de table - TRUNCATE supprime toutes les lignes.
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.
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 WHERE
dans DELETE
mais dans TRUNCATE
vous ne pouvez pas l'utiliserDELETE
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 ligneDELETE
, 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-ciTRUNCATE TABLE
supprime toutes les lignes d'une table, mais la structure de la table et ses colonnes, les contraintes , les index, etc. restentDELETE
ne correspond pas à la colonne RESEED
mais à la déclaration TRUNCATE
RESEEDS
de la colonne IDENTITY
TRUNCATE TABLE
sur des tables qui: FOREIGN KEY
. (Vous pouvez tronquer une table contenant une clé étrangère Qui se réfère elle-même.)TRUNCATE TABLE
ne peut pas activer de déclencheur, car l'opération n'enregistre pas les suppressions individuelles rowSupprimer 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
Déclaration tronquée
Instruction Truncate Supprimée ou suppression de toutes les lignes 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
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.
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