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
UNIQUEIDENTIFIERuna 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
UpdateoInsertla operación ocurre en la mesa.Si desea producir rápidamente el tema (Índice de fragmentación), crear una
Indexen su tabla de prueba con menosfill factory hacer pesadaUpdateo deInsertoperación en esa tabla. Puedes trabajar con estos scripts.fuente
También puede usar
CRYPT_GEN_RANDOMcomo 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