Utilizamos tecnologías como las cookies para almacenar y/o acceder a la información del dispositivo. Lo hacemos para mejorar la experiencia de navegación y para mostrar anuncios personalizados. El consentimiento a estas tecnologías nos permitirá procesar datos como el comportamiento de navegación o los ID's únicos en este sitio. No consentir o retirar el consentimiento, puede afectar negativamente a ciertas características y funciones.
El almacenamiento o acceso técnico es estrictamente necesario para el propósito legítimo de permitir el uso de un servicio específico explícitamente solicitado por el abonado o usuario, o con el único propósito de llevar a cabo la transmisión de una comunicación a través de una red de comunicaciones electrónicas.
El almacenamiento o acceso técnico es necesario para la finalidad legítima de almacenar preferencias no solicitadas por el abonado o usuario.
El almacenamiento o acceso técnico que se utiliza exclusivamente con fines estadísticos.
El almacenamiento o acceso técnico que se utiliza exclusivamente con fines estadísticos anónimos. Sin un requerimiento, el cumplimiento voluntario por parte de tu Proveedor de servicios de Internet, o los registros adicionales de un tercero, la información almacenada o recuperada sólo para este propósito no se puede utilizar para identificarte.
El almacenamiento o acceso técnico es necesario para crear perfiles de usuario para enviar publicidad, o para seguir al usuario en un sitio web o en varios sitios web con fines de marketing similares.
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:
SELECT
TABLE_NAME
FROM
INFORMATION_SCHEMA.TABLES
WHERE
TABLE_TYPE =
'BASE TABLE'
por:
SELECT
'['
+ TABLE_SCHEMA +
'].['
+ TABLE_NAME +
']'
FROM
INFORMATION_SCHEMA.TABLES
WHERE
TABLE_TYPE =
'BASE TABLE'
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:
1
---Ver fragmentation y construir las instrucciones
2
3
WITH
INDICES (BD, INDICETIPO, FRAGMENTACION, INDICE, TABLA)
4
5
AS
(
6
SELECT
DBS.
NAME
BASEDEDATOS, PS.INDEX_TYPE_DESC, PS.AVG_FRAGMENTATION_IN_PERCENT,
7
IND.
NAME
INDICE, TAB.
NAME
TABLA
8
FROM
9
SYS.DM_DB_INDEX_PHYSICAL_STATS (DB_ID(),
NULL
,
NULL
,
NULL
,
NULL
) PS
10
INNER
JOIN
SYS.DATABASES DBS
11
ON
PS.DATABASE_ID = DBS.DATABASE_ID
12
INNER
JOIN
SYS.INDEXES IND
13
ON
PS.OBJECT_ID = IND.OBJECT_ID
14
INNER
JOIN
SYS.TABLES TAB
15
ON
TAB.OBJECT_ID = IND.OBJECT_ID
16
WHERE
IND.
NAME
IS
NOT
NULL
AND
PS.INDEX_ID = IND.INDEX_ID
17
AND
PS.AVG_FRAGMENTATION_IN_PERCENT > 0)
18
SELECT
DISTINCT
19
CASE
20
WHEN
FRAGMENTACION > 5
AND
FRAGMENTACION 30
THEN
'ALTER INDEX '
+ INDICE +
' ON '
+ TABLA +
' REBUILD WITH (ONLINE = ON)'
21
END
QUERY, FRAGMENTACION, BD, INDICE, TABLA
22
FROM
(
SELECT
FRAGMENTACION, INDICE, TABLA, BD
FROM
INDICES
23
WHERE
FRAGMENTACION > 5) A
24
ORDER
BY
FRAGMENTACION
DESC
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!