Me gustaría crear condiciones de índices incorrectos intencionalmente en una base de datos de prueba de SQL Server 2017 que tengo, solo para comprender mejor estos scripts de mantenimiento. Mantenimiento del índice y estadísticas de SQL Server
¿Existe una forma rápida / automática de comprometer la integridad del índice o aumentar la fragmentación del índice? ¿Conoces algún recurso útil que pueda mirar para lograr esto?
sql-server
index
clustered-index
mororo
fuente
fuente
DBCC SHRINKDATABASE ([yourNONProdDB])
Respuestas:
Una forma rápida que puedo imaginar es crear una tabla con
UNIQUEIDENTIFIER
una clave principal e insertar muchos valores aleatorios. Esto podría lograrse usando este script:Esto generará millones de filas.
Sabiendo que eso
NEWID()
no garantiza ningún pedido, SQL Server tendrá que insertar en puntos aleatorios en la tabla, eso fragmentará la clave primaria.fuente
INSERT dbo.Tests (Id) SELECT NEWID(); GO 1000000;
esto obviamente llevará más tiempo. Vea pastebin.com/SVLtiRnP para ver un ejemplo que hice para otra pregunta. ¿Usar filas de longitud variable y actualizarlas al azar podría producir una fragmentación más eficiente?Quería hacer varios índices "feos", así que hice lo siguiente. Funciono bien
fuente
Por lo general, el índice de fragmentación ocurre cuando hay
Update
oInsert
la operación ocurre en la mesa.Si desea producir rápidamente el tema (Índice de fragmentación), crear una
Index
en su tabla de prueba con menosfill factor
y hacer pesadaUpdate
o deInsert
operación en esa tabla. Puedes trabajar con estos scripts.fuente
También puede usar
CRYPT_GEN_RANDOM
como lo hice en esta respuesta: Filtrar esquema en índice Optimizar secuencia de comandos .Puede insertar datos en una columna numérica que tenga un índice para fragmentarla así:
También puede actualizar los datos o convertirlos en una cadena en lugar de un número si eso es lo que necesita.
fuente