Domanda

Ho alcune tabelle che creo come parte del mio rollup di report. Non ho più bisogno di loro dopo. Qualcuno ha detto di troncarli come sarebbe più veloce.

È stato utile?

Soluzione

L'eliminazione dei record da una tabella registra ogni eliminazione ed esegue i trigger di eliminazione per i record eliminati. Troncare è un comando più potente che svuota una tabella senza registrare ogni riga. SQL Server ti impedisce di troncare una tabella con chiavi esterne a cui fa riferimento, a causa della necessità di controllare le chiavi esterne su ogni riga.

Truncate è normalmente ultraveloce, ideale per ripulire i dati da una tabella temporanea. Conserva la struttura della tabella per un uso futuro.

Se vuoi effettivamente rimuovere la tabella definizioni così come i dati, lascia semplicemente cadere le tabelle.

Vedi questo articolo MSDN per maggiori informazioni

Altri suggerimenti

DROP TABLE elimina la tabella.

TRUNCATE TABLE lo svuota, ma lascia la sua struttura per i dati futuri.

DROP e TRUNC fanno cose diverse:

TRUNCATE TABLE

  

Rimuove tutte le righe da una tabella senza   registrando le singole eliminazioni di riga.   TRUNCATE TABLE è simile al   Istruzione DELETE senza clausola WHERE;   tuttavia, TRUNCATE TABLE è più veloce e   utilizza meno log di sistema e delle transazioni   risorse.

DROP TABLE

  

Rimuove una o più definizioni di tabella   e tutti i dati, gli indici, i trigger,   vincoli e autorizzazioni   specifiche per tali tabelle.

Per quanto riguarda la velocità, la differenza dovrebbe essere piccola. E comunque se non hai bisogno della struttura della tabella, usa sicuramente DROP.

Penso che tu intenda la differenza tra DELETE TABLE e TRUNCATE TABLE.

DROP TABLE

  

rimuove la tabella dal database.

ELIMINA TABELLA

  

senza una condizione elimina tutte le righe. Se sono presenti trigger e riferimenti, questo verrà elaborato per ogni riga. Anche un indice verrà modificato, se presente.

TRUNCATE TABLE

  

imposta il conteggio delle righe zero e senza registrare ogni riga. Che è molto più veloce di entrambi.

Nessuna di queste risposte evidenzia un'importante differenza rispetto a queste due operazioni. La tabella di rilascio è un'operazione che può essere ripristinata. Tuttavia, non è possibile eseguire il rollback del troncamento [è possibile eseguire il rollback anche di 'TRUNCATE TABLE']. In questo modo far cadere una tabella molto grande può essere molto costoso se ci sono molte righe, perché tutte devono essere registrate in uno spazio temporaneo nel caso in cui si decida di eseguire il rollback.

Di solito, se voglio liberarmi di un grande tavolo, lo troncerò, quindi lo lascerò cadere. In questo modo i dati verranno annullati senza record e la tabella può essere eliminata e tale eliminazione sarà molto economica poiché non è necessario registrare dati.

È importante sottolineare che il troncamento elimina solo i dati, lasciando la tabella, mentre drop, infatti, eliminerà i dati e la tabella stessa. (supponendo che le chiavi esterne non precludano tale azione)

TRUNCATE TABLE mantiene tutta la tua vecchia indicizzazione e quant'altro. DROP TABLE, ovviamente, si sbarazzerebbe del tavolo e richiederebbe di ricrearlo in seguito.

Tabella DROP

DROP TABLE [table_name];
  

Il comando DROP viene utilizzato per rimuovere una tabella dal database. È un comando DDL. Verranno rimosse anche tutte le righe, gli indici e i privilegi della tabella. L'operazione DROP non può essere ripristinata.

ELIMINA tabella

DELETE FROM [table_name]
WHERE [condition];

DELETE FROM [table_name];
  

Il comando DELETE è un comando DML. Può essere utilizzato per eliminare tutte le righe o alcune righe dalla tabella in base alla condizione specificata nella clausola WHERE. Viene eseguito utilizzando un blocco di riga, ogni riga della tabella viene bloccata per l'eliminazione. Mantiene il registro delle transazioni, quindi è più lento di TRUNCATE.   Le operazioni DELETE possono essere ripristinate.

Tabella TRUNCATE

TRUNCATE TABLE [table_name];
  

Il comando TRUNCATE rimuove tutte le righe da una tabella. Non registra la cancellazione di ogni riga, ma registra la deallocazione delle pagine di dati della tabella, il che rende più veloce di DELETE. Viene eseguito utilizzando un blocco tabella e l'intera tabella viene bloccata per rimuovere tutti i record. È un comando DDL. Le operazioni TRUNCATE non possono essere ripristinate.

Drop elimina completamente la tabella, rimuovendo anche la definizione. Troncare svuota la tabella ma non elimina la definizione.

Il troncamento della tabella svuota la tabella. Eliminare il tavolo lo elimina del tutto. O uno sarà veloce, ma lasciarlo probabilmente sarà più veloce (a seconda del motore di database).

Se non ti serve più, rilascialo in modo che non ingombra lo schema.

ELIMINA Tabella A anziché TRUNCARE Tabella A? Un malinteso comune è che fanno la stessa cosa. Non così. In effetti, ci sono molte differenze tra i due.

ELIMINA è un'operazione registrata su una base per riga. Questo significa che la cancellazione di ogni riga viene registrata ed eliminata fisicamente.

Puoi eliminare qualsiasi riga che non violi un vincolo, lasciando al suo posto la chiave esterna o qualsiasi altra contraffazione.

TRUNCATE è anche un'operazione registrata, ma in modo diverso. TRUNCATE registra la deallocazione delle pagine di dati in cui i dati esiste. La deallocazione delle pagine di dati significa che i tuoi dati le righe esistono ancora nelle pagine di dati, ma il file le estensioni sono state contrassegnate come vuote per il riutilizzo. Questo è ciò che rende TRUNCATE un'operazione più veloce da eseguire su CANC.

Non puoi TRUNCARE una tabella che ha una chiave esterna vincoli. Dovrai rimuovere le contraffazioni, TRUNCARE il file tabella e riapplica i contorni.

TRUNCATE reimposterà tutte le colonne di identità sul seed predefinito valore.

troncare rimuove tutte le righe, ma non la tabella stessa, è essenzialmente equivalente all'eliminazione senza clausola where, ma di solito più veloce.

Ho una correzione per una delle affermazioni sopra ... " troncare non può essere annullato "

Il troncamento può essere ripristinato. Ci sono alcuni casi in cui non è possibile eseguire una tabella di troncamento o eliminazione, ad esempio quando si dispone di un riferimento di chiave esterna. Per un'attività come la reportistica mensile, probabilmente abbandonerei il tavolo una volta che non ne avevo più bisogno. Se stavo facendo questo report cumulativo più spesso, probabilmente terrei invece il tavolo e userei troncato.

Spero che questo aiuti, ecco alcune informazioni che dovresti trovare utili ...

Per ulteriori dettagli, consultare il seguente articolo: http://sqlblog.com/blogs/denis_gobo/archive/ 2007/06/13 / 1458.aspx

Inoltre, per maggiori dettagli sull'eliminazione o il troncamento, consulta questo articolo: http://www.sql-server-performance.com/faq/delete_truncate_difference_p1. aspx

Grazie! Jeff

  

TRUNCATE TABLE è funzionalmente   identico all'istruzione DELETE con n   Clausola WHERE: rimuovono entrambe le righe   la tavola. Ma TRUNCATE TABLE lo è   più veloce e utilizza meno sistema e   risorse del log delle transazioni di ELIMINA.

     

L'istruzione DELETE rimuove le righe una   alla volta e registra una voce nel   registro delle transazioni per ogni riga eliminata.   TRUNCATE TABLE rimuove i dati da   deallocazione delle pagine di dati utilizzate   memorizzare i dati della tabella e solo il   le deallocazioni di pagina sono registrate in   registro delle transazioni.

     

TRUNCATE TABLE rimuove tutte le righe da a   tabella, ma la struttura della tabella e la sua   colonne, vincoli, indici e così via   resta. Il contatore utilizzato da un   l'identità per le nuove righe viene reimpostata su   seme per la colonna. Se lo desidera   conservare il contatore di identità, utilizzare   ELIMINA invece. Se si desidera rimuovere   definizione della tabella e relativi dati, utilizzare il   Dichiarazione DROP TABLE.

     

Non è possibile utilizzare TRUNCATE TABLE su a   tabella a cui fa riferimento un TASTO ESTERO   vincolo; utilizzare invece CANC   dichiarazione senza una clausola WHERE.   Poiché TRUNCATE TABLE non è registrato,   non può attivare un trigger.

     

TRUNCATE TABLE non può essere utilizzato su   tabelle che partecipano a un indice   view.

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

Nello standard SQL, la tabella DROP rimuove la tabella e lo schema della tabella - TRUNCATE rimuove tutte le righe.

Le risposte qui corrispondono alla domanda, ma ho intenzione di rispondere alla domanda che non hai posto. " Devo usare troncare o eliminare? " Se stai rimuovendo tutte le righe da una tabella, in genere vorrai troncare, poiché è molto più veloce. Perché è molto più veloce? Almeno nel caso di Oracle, reimposta il high water mark . Questo è fondamentalmente un dereferenziamento dei dati e consente al db di riutilizzarli per qualcos'altro.

DELETE VS TRUNCATE

  1. L'istruzione DELETE rimuove le righe una alla volta e registra una voce nella transazione registro per ogni riga eliminata. TRUNCATE TABLE rimuove i dati deallocando i dati le pagine utilizzate per memorizzare i dati della tabella e registrano solo le deallocazioni di pagina nel file registro delle transazioni
  2. Possiamo usare la clausola WHERE in DELETE ma in TRUNCATE non puoi usarla
  3. Quando l'istruzione DELETE viene eseguita utilizzando un blocco di riga, ogni riga nella tabella viene bloccata per la cancellazione. TRUNCATE TABLE blocca sempre la tabella e la pagina ma non ogni riga
  4. Dopo l'esecuzione di un'istruzione DELETE , la tabella può ancora contenere pagine vuote l'operazione di eliminazione non utilizza un blocco tabella, la tabella (heap) conterrà molti vuoti pagine. Per gli indici, l'operazione di eliminazione può lasciare pagine vuote, sebbene queste
    le pagine verranno rapidamente dislocate mediante un processo di pulizia in background
  5. TRUNCATE TABLE rimuove tutte le righe da una tabella, ma la struttura della tabella e le sue colonne, restano vincoli, indici e così via
  6. L'istruzione
  7. DELETE non RESEED ma l'istruzione TRUNCATE RESEEDS Colonna IDENTITY
  8. Non puoi utilizzare TRUNCATE TABLE su tabelle che:
    1. Sono referenziati da un vincolo FOREIGN KEY . (Puoi troncare una tabella che ha un chiave esterna che fa riferimento a se stessa.)
    2. Partecipa a una vista indicizzata.
    3. Vengono pubblicati utilizzando la replica transazionale o unisci replica
  9. TRUNCATE TABLE non può attivare un trigger perché l'operazione non registra i singoli eliminazioni di riga
  

Elimina dichiarazione

Elimina istruzione elimina le righe della tabella e restituisce il numero di righe eliminato dalla tabella. In questa istruzione, utilizziamo la clausola where per eliminare i dati dalla tabella

  • L'istruzione Delete è più lenta dell'istruzione Truncate perché ha eliminato i record uno per uno
  

Dichiarazione troncata

Dichiarazione troncata Eliminata o rimossa tutte le righe dalla tabella.

  • È più veloce dell'istruzione Delete perché ha eliminato tutti i record dalla tabella
  • L'istruzione troncata non restituisce il numero di righe viene eliminato dalla tabella
  

Dichiarazione di rilascio

L'istruzione drop ha eliminato tutti i record e la struttura della tabella

  

Elimina

     

Il comando DELETE è usato per rimuovere le righe da una tabella. Una clausola WHERE può essere utilizzata per rimuovere solo alcune righe. Se non viene specificata alcuna condizione WHERE, tutte le righe verranno rimosse. Dopo aver eseguito un'operazione DELETE è necessario   COMMIT o ROLLBACK la transazione per rendere permanente la modifica o annullarla.

     

TRUNCATE

     

TRUNCATE rimuove tutte le righe da una tabella. Non è possibile eseguire il rollback dell'operazione ... Pertanto, TRUCATE è più veloce e non utilizza lo spazio di annullamento di un DELETE.

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

Goccia elimina l'intera tabella e tutta la sua struttura

troncare elimina tutte le righe dalla tabella è diverso dall'eliminazione che elimina anche gli indici delle righe

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top