Перемещение всех некластеризованных индексов в другую файловую группу в 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.

обновления

  1. @psteffek изменен скрипт для работы на SQL Server 2012. Я слил его изменения.
  2. процедура терпит неудачу когда ваша таблица имеет далее. Пока никаких исправлений.
  3. @srutzky указал, что процедура не гарантирует сохранение порядка индекса и сделал предложения о том, как его исправить. Я соответствующим образом обновил процедуру.
  4. ojiNY отметил, что процедура оставила фильтры индекса (для совместимости с SQL 2005). По его предложению я добавил их обратно.

Script их, изменить предложение ON, отбросить их, повторно запустить новый скрипт. На самом деле альтернативы нет.

к счастью, есть сценарии на паутине, такие как это один это будет иметь дело со сценариями для вас.


Update: эта вещь займет много времени, чтобы сделать шаг 2 вручную, если вы используете MS SQL Server manager 2008R2 или более ранней версии. Я использовал sql server manager 2014, поэтому он работает хорошо (потому что способ экспорта и создания индекса легко изменить) Я попытался запустить скрипт в SQL server 2014 и получил некоторые проблемы, я слишком ленив, чтобы обнаружить проблемы, поэтому я придумал другое решение, которое не зависит от версии SQL server, вы бегущий.

  1. экспорт индекса (с помощью drop и create) Right click on your DB select Generate Scripts

Select Table you want to move the index enter image description here

2.Обновите свой скрипт, удалите все, что связано с drop create tables, сохраните вещь, принадлежащую индексам. и замените исходный индекс новым индексом (в моем случае я заменяю ON [PRIMARY] на ON [SECONDARY] [enter image description here]5

  1. выполнить скрипт! И подожди, пока все не закончится.

(вы можете сохранить сценарий для запуска в некоторых других средах).