Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Transact-SQL: ¿TRUNCATE o DROP/CREATE TABLE? ¿Qué es mas rapido y seguro?

192 views
Skip to first unread message

Jesús Lozano

unread,
Jan 7, 2004, 12:10:22 PM1/7/04
to
Pues eso, que me recomendais?? Qué diferencias sustancias existen entre
ambas técnicas de "vaciado" de tablas??

Gracias de antemano

Jesús Lozano


Maximiliano Damian Accotto

unread,
Jan 7, 2004, 12:39:22 PM1/7/04
to
Hola, mira esas tecnicas son buenas ahora ojo con esto, si por ej tenes
clave foranias o vistas indexadas que hacen referencia a este objeto, no
podras usar Truncate ni Drop y deberias usar el viejo y amado Delete.

Ahora si este no es tu caso, me parece mucho mas optimo el Truncate.

Salu2

--
Maximiliano Damian Accotto


"Jesús Lozano" <jlo...@isotrol.com> escribió en el mensaje
news:%23k8zVFU...@TK2MSFTNGP11.phx.gbl...

Adrian Garcia

unread,
Jan 7, 2004, 5:52:06 PM1/7/04
to
Como siempre, todo depende:

TRUNCATE TABLE es mas rapido, significativamente mas rapido ya que
simplemente marca las paginas de datos e indices de la base de datos
pertenecientes a la tabla como libres y solo deja en el log de transacciones
la referencia de las paginas que fueron liberadas. TRUNCATE TABLE no dispara
triggers por operaciones de DELETE con lo cual a veces este comportamiento
es deseado y otras no. No puedes ejecutar TRUNCATE TABLE si hay alguna
relacion de Foreign key en la tabla, con lo cual primero tendrias que
dropear todas las relaciones para luego ejecutar el TRUNCATE.

El cambio un DELETE va logeando cada fila eliminada en el log de
transacciones y disparando cada trigger de delete asociado a la misma al
mismo tiempo que va actualizando todos los indices relacionados a la tabla.
Si hay 1.000.000 en la tabla todas estas filas iran a parar a log de
transacciones.

Saludos
Adrian D. Garcia
NDSoft


pero hayq ue tener en cuenta que:
"Jesús Lozano" <jlo...@isotrol.com> wrote in message
news:%23k8zVFU...@TK2MSFTNGP11.phx.gbl...

Miguel Egea

unread,
Jan 7, 2004, 1:32:59 PM1/7/04
to
tienes un artículo muy detallado escrito por eladio rincón en portalsql.com
repasalo está muy bien.


--
Saludos

Miguel Egea
Microsoft SQL-SERVER MVP
Brigada Anti-Cursores
"Adrian Garcia" <adriandan...@hotmail.com> escribió en el mensaje
news:#4e$BmU1DH...@tk2msftngp13.phx.gbl...

ulises

unread,
Jan 7, 2004, 2:02:37 PM1/7/04
to
Obviando el hecho que tanto el TRUNCATE TABLE como el DROP
TABLE no pueden realizarse si hay FK, la diferencia es
como se graba la información en el log, puedes probar
creando una tabla, insertando datos y luego haciendo el
TRUNCATE, si luego usas SELECT * FROM ::fn_dblog(null,
null), podrás ver que el log solo registra :

001 LOP_BEGIN_XACT LCX_NULL
002 LOP_MODIFY_ROW LCX_IAM
003 LOP_MODIFY_ROW LCX_PFS
004 LOP_MODIFY_ROW LCX_PFS
005 LOP_MODIFY_COLUMNS LCX_CLUSTERED
006 LOP_MODIFY_ROW LCX_CLUSTERED
007 LOP_MODIFY_ROW LCX_CLUSTERED
008 LOP_MODIFY_ROW LCX_CLUSTERED
009 LOP_MODIFY_ROW LCX_CLUSTERED
00a LOP_MODIFY_ROW LCX_CLUSTERED
00b LOP_MODIFY_ROW LCX_CLUSTERED
00c LOP_MARK_DDL LCX_NULL
00d LOP_DELTA_SYSIND LCX_CLUSTERED
00e LOP_COMMIT_XACT LCX_NULL

mientras que con el DROP :

001 LOP_BEGIN_XACT LCX_NULL
002 LOP_DELETE_ROWS LCX_MARK_AS_GHOST
003 LOP_MODIFY_HEADER LCX_PFS
004 LOP_SET_BITS LCX_PFS
005 LOP_DELETE_ROWS LCX_MARK_AS_GHOST
006 LOP_SET_BITS LCX_PFS
007 LOP_DELETE_ROWS LCX_MARK_AS_GHOST
008 LOP_DELETE_ROWS LCX_MARK_AS_GHOST
009 LOP_MODIFY_ROW LCX_IAM
00a LOP_MODIFY_ROW LCX_PFS
00b LOP_MODIFY_ROW LCX_PFS
00c LOP_DELETE_ROWS LCX_MARK_AS_GHOST
00d LOP_SET_BITS LCX_PFS
00e LOP_MARK_DDL LCX_NULL
00f LOP_DELETE_ROWS LCX_MARK_AS_GHOST
010 LOP_SET_BITS LCX_PFS
011 LOP_DELETE_ROWS LCX_MARK_AS_GHOST
012 LOP_SET_BITS LCX_PFS
013 LOP_DELETE_ROWS LCX_MARK_AS_GHOST
014 LOP_SET_BITS LCX_PFS
015 LOP_BEGIN_XACT LCX_NULL
016 LOP_DELTA_SYSIND LCX_CLUSTERED
017 LOP_COMMIT_XACT LCX_NULL
001 LOP_DELTA_SYSIND LCX_CLUSTERED
002 LOP_BEGIN_XACT LCX_NULL
003 LOP_DELTA_SYSIND LCX_CLUSTERED
004 LOP_COMMIT_XACT LCX_NULL
001 LOP_COMMIT_XACT LCX_NULL

Saludos,
Ulises

>-----Mensaje original-----

Miguel Egea

unread,
Jan 7, 2004, 5:36:10 PM1/7/04
to
naturalmente me refería a jesus, se me coló el hilo


--
=================
Miguel Egea
http://www.portalsql.com
Microsoft SQL-SERVER MVP.
Brigada Anti-Cursores
Aviso de Seguridad
http://www.microsoft.com/spain/technet/seguridad/boletines/MS03-039-USER.asp
==================

"Miguel Egea" <migue...@online.telefonica.net> escribió en el mensaje
news:ugPYuyU1...@TK2MSFTNGP12.phx.gbl...

Adrian Garcia

unread,
Jan 7, 2004, 11:16:44 PM1/7/04
to
Aun asi nunca viene nada mal leerlo.
Gracias por la info.

Saludos
Adrian D. Garcia
NDSoft


"Miguel Egea" <migue...@online.telefonica.net> wrote in message
news:OlDyl6W1...@TK2MSFTNGP10.phx.gbl...

Jesús Lozano

unread,
Jan 8, 2004, 6:30:59 AM1/8/04
to
Ya tengo en mi poder el documento de Eladio que he leído con avidez...

aunque no me aclara si Truncate es más rapido que hacer un Drop/create,
aunque supongo que por el hecho de usar dos instrucciones en vez de una y el
mayor número de operaciones que implica, el Truncate será más rápido

Gracias a todos

Jesús Lozano


Miguel Egea

unread,
Jan 8, 2004, 1:19:07 PM1/8/04
to
Si, truncate, cuando se puede es definitvamente más rápido..


--
Saludos

Miguel Egea
Microsoft SQL-SERVER MVP
Brigada Anti-Cursores

"Jesús Lozano" <jlo...@isotrol.com> escribió en el mensaje
news:#aSgYsd1...@TK2MSFTNGP11.phx.gbl...

Jesús Lozano

unread,
Jan 9, 2004, 3:43:05 AM1/9/04
to
Gracias Miguel :)))

Jesús


0 new messages