tipos primary nonclustered indice index create crear clusterizados clustered sql-server database-design indexing filegroup

sql-server - nonclustered - primary key clustered sql server



Mover todos los índices no agrupados a otro grupo de archivos en SQL Server (3)

En SQL Server 2008, quiero mover TODOS los índices no agrupados en una base de datos a un grupo de archivos secundario. ¿Cuál es la forma más fácil de hacer esto?


Actualización: Esto llevará mucho tiempo hacer el paso 2 manualmente si está utilizando el administrador de MS SQL Server 2008R2 o anterior. Utilicé SQL Server Manager 2014, así que funciona bien (porque la forma en que exporta el drop y el índice de creación es fácil de modificar) Intenté ejecutar script en SQL Server 2014 y tuve algún problema, soy demasiado flojo para detectar los problemas Entonces, se me ocurre otra solución que no depende de la versión de SQL Server que esté ejecutando.

  1. Exporte su índice (con soltar y crear)

2. Actualice su secuencia de comandos, elimine todo lo relacionado con la caída de crear tablas, mantenga la cosa pertenece a los índices. y Reemplace su índice original con el nuevo índice (en mi caso, reemplazo ON [PRIMARY] por ON [SECONDARY] [ ] 5

  1. ¡Ejecutar guión! Y espera hasta que termine.

(Es posible que desee guardar el script para ejecutarlo en algún otro entorno).


Escríbalas, cambie la cláusula ON, suéltelas, vuelva a ejecutar la nueva secuencia de comandos. No hay alternativa realmente.

Afortunadamente, hay guiones en Interwebs como este que se ocupará de guiones para usted.


Ejecute este script actualizado para crear un procedimiento almacenado llamado MoveIndexToFileGroup . Este procedimiento mueve todos los índices no agrupados en una tabla a un grupo de archivos especificado. Incluso es compatible con las columnas INCLUDE que otros scripts no tienen. Además, no reconstruirá ni moverá un índice que ya esté en el grupo de archivos deseado. Una vez que hayas creado el procedimiento, llámalo así:

EXEC MoveIndexToFileGroup @DBName = ''<your database name>'', @SchemaName = ''<schema name that defaults to dbo>'', @ObjectNameList = ''<a table or list of tables>'', @IndexName = ''<an index or NULL for all of them>'', @FileGroupName = ''<the target file group>'';

Para crear un script que ejecutará esto para cada tabla en su base de datos, cambie la salida de su consulta a texto y ejecútelo:

SELECT ''EXEC MoveIndexToFileGroup '''''' +TABLE_CATALOG+'''''','''''' +TABLE_SCHEMA+'''''','''''' +TABLE_NAME+'''''',NULL,''''the target file group'''';'' +char(13)+char(10) +''GO''+char(13)+char(10) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = ''BASE TABLE'' ORDER BY TABLE_SCHEMA, TABLE_NAME;

Por favor, consulte el blog original para más detalles. No escribí este procedimiento, pero lo actualicé de acuerdo con las respuestas del blog y confirmé que funciona tanto en SQL Server 2005 como en 2008.

Actualizaciones

  1. @psteffek modificó la secuencia de comandos para trabajar en SQL Server 2012. Combiné sus cambios.
  2. El procedimiento falla cuando su tabla tiene la opción IGNORE_DUP_KEY activada. No hay solución para esto todavía.
  3. @srutzky señaló que el procedimiento no garantiza preservar el orden de un índice e hizo sugerencias sobre cómo solucionarlo. Actualicé el procedimiento en consecuencia.
  4. ojiNY notó el procedimiento que dejó fuera los filtros de índice (por compatibilidad con SQL 2005). Por su sugerencia, los agregué de nuevo.