Перемещение всех некластеризованных индексов в другую файловую группу в SQL Server

В SQL Server 2008 я хочу переместить ВСЕ некластеризованные индексы в БД во вторичную файловую группу. Какой самый простой способ сделать это?

Ответы

Ответ 1

Запустите этот обновленный script, чтобы создать хранимую процедуру с именем 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>';

Чтобы создать script, который будет запускаться для каждой таблицы в вашей базе данных, переключите вывод запроса в текст и запустите это:

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;

Подробнее см. оригинал blog. Я не писал эту процедуру, но обновил ее в соответствии с ответами блога и подтвердил, что она работает как на SQL Server 2005, так и на 2008 год.

Обновление

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

Ответ 2

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

К счастью, в Interwebs есть скрипты, такие как one, которые будут обрабатывать скрипты для вас.

Ответ 3

Обновление. Это займет много времени, чтобы сделать шаг 2 вручную, если вы используете диспетчер MS SQL Server 2008R2 или ранее. Я использовал SQL Server Manager 2014, так что он работает хорошо (потому что способ экспортировать падение и создать индекс легко изменить) Я попытался запустить script на SQL Server 2014 и получил некоторую проблему, я слишком ленив, чтобы обнаружить проблемы, поэтому я придумал другое решение, которое не зависит от версии SQL-сервера, на котором вы работаете. < бр /" >

  • Экспортируйте свой индекс (с удалением и созданием) Щелкните правой кнопкой мыши на вашем блоке DB Generate Scripts

Выбрать таблицу, в которую вы хотите переместить индекс введите описание изображения здесь

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

  1. Запустите script! И подождите, пока это не закончится.

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