Запустите обновленный скрипт , чтобы создать хранимую процедуру с именем MoveIndexToFileGroup
. Эта процедура перемещает все некластеризованные индексы в таблице в указанную файловую группу. Он даже поддерживает столбцы INCLUDE
, которые не поддерживаются некоторыми другими сценариями. Кроме того, он не будет перестраивать или перемещать индекс, который уже находится в нужной группе файлов. После того, как вы создали процедуру, назовите ее так:
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>';
Чтобы создать скрипт, который будет запускать его для каждой таблицы в вашей базе данных, переключите вывод запроса на текст и запустите:
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;
Пожалуйста, обратитесь к оригинальному блогу для получения более подробной информации. Я не писал эту процедуру, но обновил ее в соответствии с ответами блога и подтвердил, что она работает как на SQL Server 2005, так и 2008.
Обновление
- @ psteffek изменил скрипт для работы на SQL Server 2012. Я слил его изменения.
- Процедура завершается неудачно, если на вашей таблице включена опция
IGNORE_DUP_KEY
. Исправления пока нет.
- @ srutzky указал, что процедура не гарантирует сохранения порядка индекса, и высказал предложения о том, как его исправить. Я обновил процедуру соответственно.
- ojiNY отметил, что процедура исключила фильтры индекса (для совместимости с SQL 2005). По его предложению я добавил их обратно.