jueves, 13 de marzo de 2014 a las 21:48hs por Gustavo Cantero (The Wolf)
Muchas veces nos a pasado que necesitamos reindexar todas las tablas de una base de datos del SQL Server y no encontramos un comando que lo haga. ¿A Uds. les pasó?
Bueno, para no entrar en pánico, especialmente si la base de datos tiene muchas tablas, armamos un script que obtiene sus nombres del diccionario de datos y ejecuta el comando DBCC REINDEX de SQL Server por cada una de ellas:
DECLARE @TableName varchar(200) DECLARE TableCursor CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' OPEN TableCursor FETCH NEXT FROM TableCursor INTO @TableName WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'Reindexando ' + @TableName DBCC DBREINDEX (@TableName) FETCH NEXT FROM TableCursor INTO @TableName END CLOSE TableCursor DEALLOCATE TableCursor
Es algo sencillo pero que nos puede ayudar a hacer un trabajo tedioso.
Espero les sirva.
Suerte!
Categoria SQL Server | Etiquetas: SQL Server
Esto es muy bueno. Nos hubiera ahorrado trabajo hace tiempo atrás!
Abrazo
Muchas gracias. Muy útil el cursor!
Muchisimas gracias… me salvaste XD me sirvió de maravilla y se mejoro el rendimiento de la base de datos.
Me alegra que te haya servido.
Suerte!
Muchas gracias, que gran ayuda.
Excelente!! De verdad muy util. Muchas gracias.
Me alegro que te sea de utilidad.
Saludos!
buenazo me sirvio muchas gracias
Te comento que fue realmente de mucha utilidad. Lo menos que puedo hacer es dejarte el comentario.
Gracias
Me alegra que te sirviera.
Gracias por el comentario.
Saludos.
Gustavo gracias por compartir tu conocimiento, es realmente valorado por mi parte.
Me gustaría si en algún momento tienes el tiempo de hacernos algunas recomendaciones de mantenimiento que nunca se nos deben de olvidar con nuestros sql.
WOW Muchas gracias por compartir esta excelente, saludos!
Me alegro que te haya sido útil.
Saludos!
Gracias por compartir, justo lo que estaba buscando para no estar revisando porcentajes ni nada por el estilo.
Hola! Me podrías orientar en cómo se ejecuta esto? Directamente? Hay que cambiar algo? Gracias!
Hola.
Este código lo ejecutás directamente y reindexa todas las tablas de la base en la cual estás «parado».
Si querés reindexar las tablas de otra base agregale un
USE MI_BASE
antes de este código.Suerte!
Muy bueno el código, pero quisiera agregarle algo mas que también puede ser de utilidad para ambientes donde se ocupe un esquema distinto al dbo
Entonces para ello, cambiar la parte:
por:
Gracias y Bendiciones!!
Muchas gracias por tu aporte, Victor.
Saludos!
Excelente aporte! gracias por compartir conocimiento
Muchas Gracias fue muy util para una base de 60 Giga y 1900 tablas.. Tambien para nuevas version se podria utilizar segun estuve leyendo en documentacion de la pagina de SQL
ALTER INDEX ALL @TableName ON REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = ON)
A mi me gusta esto que os dejo porque consulta la fragmentación de cada tabla y en función de eso, construyes la sentencia de REORGANIZE o de REBUILD:
Excelente, muy buena utilidad, me ahorra tiempo en el proceso . Muchas gracias y bendiciones
Me alegro que te sirva.
¡Saludos!
Gracias
Que diferencia existe en reconstruir indices de una base y reindexar toda la base?
Hola Carlos.
En esta página se explica en detalle: Indices en SQL Server: diferencias entre Rebuild y Reorganize.
Saludos.
Si entre reorganizar y reconstruir pero en reindexar, yo reconstruyo todos los indices de mis bases y después reindexo toda las base, el tiempo que se lleva reconstruyendo es infinitamente menor al reindexar , las instrucciones tambien son digerentes
así reindexo DBCC DBREINDEX (@TableName) y así reconstruyo EXEC (‘ALTER INDEX ALL ON [‘ + @TableName +
‘] REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = ON)’)
Hola Gustavo, realmente excelente la solucion para reidexar.
Me alegra que te haya servido.
¡Saludos!