Перемещение всех некластеризованных индексов в другую файловую группу в SQL Server - PullRequest
17 голосов
/ 21 ноября 2010

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

Ответы [ 3 ]

22 голосов
/ 04 мая 2011

Запустите обновленный скрипт , чтобы создать хранимую процедуру с именем 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. Процедура завершается неудачно, если на вашей таблице включена опция IGNORE_DUP_KEY. Исправления пока нет.
  3. @ srutzky указал, что процедура не гарантирует сохранения порядка индекса, и высказал предложения о том, как его исправить. Я обновил процедуру соответственно.
  4. ojiNY отметил, что процедура исключила фильтры индекса (для совместимости с SQL 2005). По его предложению я добавил их обратно.
6 голосов
/ 21 ноября 2010

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

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

1 голос
/ 25 августа 2015

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

  1. Экспорт вашего индекса (с опусканием и созданием) Right click on your DB select Generate Scripts

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

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

  1. Запустить скрипт! И ждать, пока это не будет сделано.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...