2012-02-01 3 views
15

Ho questa tabella in un'istanza di SQL Server 2008 R2 che ho un processo pianificato che viene eseguito di notte contro di esso. La tabella può contenere fino a 500.000 record contemporaneamente. Dopo aver elaborato questa tabella ho bisogno di rimuovere tutte le righe da esso così mi chiedo quale dei seguenti metodi produrrebbe meno spese generali (vale a dire le voci del registro transazioni eccessiva):Troncare o rilasciare e creare tabella

  1. troncare la tabella
  2. Drop e ricreare la tabella

L'eliminazione del contenuto della tabella è scaduta a causa del tempo e delle voci aggiuntive del registro delle transazioni effettuate.

Il consenso sembra essere Troncamento, grazie a tutti!

+4

[Alcuni confronti tra la quantità di registrazione qui] (http://dba.stackexchange.com/a/7685/3690). 'TRUNCATE' ha un logging leggermente inferiore a' DROP' dato che il dropping causa anche l'eliminazione delle righe associate per quell'oggetto dalle tabelle di sistema (che è anche loggato) –

risposta

8

Troncare la tabella non lascia voci riga per riga nel log delle transazioni, in modo che nessuna soluzione ingombra troppo i registri. Se fossi in me, avrei troncato per dover lasciare e creare ogni volta.

13

TRUNCATE TABLE è la soluzione migliore. Da MSDN:

rimuovere tutte le righe da una tabella senza registrare la singola riga eliminazioni.

Ciò significa che non aumenterà il registro delle transazioni. Eliminare e creare la tabella richiede non solo un SQL più complesso, ma anche autorizzazioni aggiuntive. Eventuali impostazioni allegate alla tabella (trigger, GRANT o DENY, ecc.) Dovranno essere ricostruite.

5

Vorrei andare per TRUNCATE TABLE. È possibile che si verifichino sovraccarichi quando gli indici, i trigger, ecc. Vengono eliminati. Inoltre perderai le autorizzazioni che dovranno essere ricreate insieme a qualsiasi altro oggetto richiesto richiesto per quella tabella.

Anche su DROP TABLE in MDSN sotto di essa cita un po 'Gotcha se si esegue DROP e CREATE TABLE nella stessa partita

DROP TABLE e CREATE TABLE non dovrebbe essere eseguito sullo stesso tavolo nella stessa partita . In caso contrario potrebbe verificarsi un errore imprevisto.

2

L'eliminazione della tabella distruggerà qualsiasi oggetto associato (indici, trigger) e potrebbe invalidare le procedure o le viste. Vorrei andare con il troncato, dal momento che non farà saltare in aria il tuo registro e non fa in modo che nessuno dei possibili problemi cada e crei.

+0

Grazie, non ci sono indici o trigger associati, sono solo preoccupato che il registro delle transazioni diventasse troppo grande. –

+0

L'ho imparato molto quando ho iniziato ad aggiungere proprietà estese alle mie tabelle, e poiché i miei script t-sql utilizzavano drop-and-create, dovevo reinserire le proprietà estese e cambiare gli script da troncare. Dopo di ciò non sono state perse proprietà estese. –