Перемещение всех некластеризованных индексов в другую файловую группу в SQL Server
в SQL Server 2008 я хочу переместить все некластеризованные индексы в БД во вторичную файловую группу. Как проще всего это сделать?
3 ответов
запустить обновленный скрипт для создания хранимой процедуры с именем 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. Я слил его изменения.
- процедура терпит неудачу когда ваша таблица имеет далее. Пока никаких исправлений.
- @srutzky указал, что процедура не гарантирует сохранение порядка индекса и сделал предложения о том, как его исправить. Я соответствующим образом обновил процедуру.
- ojiNY отметил, что процедура оставила фильтры индекса (для совместимости с SQL 2005). По его предложению я добавил их обратно.
Script их, изменить предложение ON, отбросить их, повторно запустить новый скрипт. На самом деле альтернативы нет.
к счастью, есть сценарии на паутине, такие как это один это будет иметь дело со сценариями для вас.
Update: эта вещь займет много времени, чтобы сделать шаг 2 вручную, если вы используете MS SQL Server manager 2008R2 или более ранней версии. Я использовал sql server manager 2014, поэтому он работает хорошо (потому что способ экспорта и создания индекса легко изменить)
Я попытался запустить скрипт в SQL server 2014 и получил некоторые проблемы, я слишком ленив, чтобы обнаружить проблемы, поэтому я придумал другое решение, которое не зависит от версии SQL server, вы бегущий.
2.Обновите свой скрипт, удалите все, что связано с drop create tables, сохраните вещь, принадлежащую индексам. и замените исходный индекс новым индексом (в моем случае я заменяю ON [PRIMARY] на ON [SECONDARY] []5
- выполнить скрипт! И подожди, пока все не закончится.
(вы можете сохранить сценарий для запуска в некоторых других средах).