Para responder a esta pregunta, primero hay que entender
- Si una tabla no tiene un índice , sus datos se llaman montón
- Si una tabla tiene un índice agrupado, ese índice es efectivamente su tabla de datos. Por lo tanto, si mueve el índice agrupado, también moverá sus datos.
El primer paso es obtener más información acerca de la tabla que queremos mover.Hacemos esto mediante la ejecución de este T-SQL: 'Data_located_on_filegroup'
sp_help N'<<your table name>>'
La salida le mostrará una columna titulada Esta es una forma útil de saber en qué grupo de archivos se encuentran los datos de su tabla. Pero más importante es el resultado que muestra información sobre los índices de la tabla. (Si solo desea ver información sobre los índices de tabla, simplemente ejecute sp_helpindex N'<<your table name>>'
). Su tabla puede tener 1) ningún índice (por lo tanto, es un montón), 2) un solo índice o 3) índices múltiples. Si index_description comienza con 'clustered, unique, ...', ese es el índice que desea mover. Si el índice también es una clave principal, eso está bien, aún puede moverlo.
Para mover el índice, hacer una nota de la index_name y index_keys se muestra en los resultados de la consulta de ayuda anterior, luego usarlos para rellenar el <<blanks>>
en la siguiente consulta:
CREATE UNIQUE CLUSTERED INDEX [<<name of clustered index>>]
ON [<<table name>>]([<<column name the index is on - from index_keys above>>])
WITH DROP_EXISTING, ONLINE
ON <<name of file group you want to move the index to>>
Los DROP EXISTING, ONLINE
opciones arriba son importantes. DROP EXISTING
se asegura de que el índice no esté duplicado, y ONLINE
mantiene la tabla en línea mientras la está moviendo.
Si el índice se está moviendo es no un índice agrupado, luego vuelva a colocar por encima de UNIQUE CLUSTERED
con NONCLUSTERED
Para mover una tabla de montón, agregue un índice agrupado a la misma, a continuación, ejecute la instrucción anterior para moverlo a un grupo de archivos diferente, luego suelte el índice.
Ahora, regrese y ejecute sp_help
en su tabla, y verifique los resultados para ver dónde se encuentran ahora su tabla y datos de índice.
Si la tabla tiene más de un índice, a continuación, después de ejecutar la instrucción anterior para mover el índice agrupado, sp_helpindex
mostrará que su índice agrupado está en el nuevo grupo de archivos, pero los índices restantes todavía habrá en el grupo de archivos original. La tabla continuará funcionando normalmente, pero debería tener una buena razón por la que desea que los índices se encuentren en diferentes grupos de archivos. Si desea que la tabla y todos sus índices estén en el mismo grupo de archivos, repita las instrucciones anteriores para cada índice, sustituyendo CREATE [NONCLUSTERED, or other] ... DROP EXISTING...
según sea necesario, según el tipo de índice que esté moviendo.
Esta es la sintaxis compatible con versiones anteriores: OP está usando SQL Server 2008. Y una descarada eliminación/actualización – gbn
Bien mierda en un cringle ... Acabo de pasar más tiempo del que me importa admitir tratando de averiguar por qué la tabla que creé en FILEGROUP2 siguió yendo a FILEGROUP1 ... es porque PK estaba en FG1 'create table (... constraint (...) en FG1) ON FG2' - FG1 tenía prioridad. Gracias por esto. – WernerCD
No todas las tablas son índices agrupados. Acabo de navegar desde Google e intento encontrar la misma información para montones. – Paul