Чтобы ответить на этот вопрос, сначала мы должны понять
- Если таблица не имеет индекса, ее данные называются heap
- ЕслиТаблица имеет кластеризованный индекс, который фактически является данными вашей таблицы.Следовательно, если вы перемещаете кластерный индекс, вы также перемещаете свои данные.
Первый шаг - узнать больше информации о таблице, которую мы хотим переместить.Мы делаем это, выполняя этот T-SQL:
sp_help N'<<your table name>>'
В выходных данных будет показан столбец с именем «Data_located_on_filegroup».Это удобный способ узнать, в какой файловой группе находятся данные вашей таблицы.Но более важным является вывод, который показывает вам информацию об индексах таблицы.(Если вы хотите видеть только информацию об индексах таблиц, просто запустите sp_helpindex N'<<your table name>>'
) Ваша таблица может иметь 1) никаких индексов (так что это куча), 2) один индекс или 3) несколько индексов.Если index_description начинается с 'cluster, unique, ...', это индекс, который вы хотите переместить.Если индекс также является первичным ключом, это нормально, вы все равно можете его переместить.
Чтобы переместить индекс, запишите index_name и index_keys, показанные в результатах вышеупомянутого запроса справки, а затем используйте их, чтобы заполнить <<blanks>>
в следующем запросе:
CREATE UNIQUE CLUSTERED INDEX [<<name of clustered index>>]
ON [<<table name>>]([<<column name the index is on - from index_keys above>>])
WITH DROP_EXISTING, ONLINE
ON <<name of file group you want to move the index to>>
Опции DROP EXISTING, ONLINE
выше важны.DROP EXISTING
следит за тем, чтобы индекс не дублировался, а ONLINE
сохраняет таблицу в режиме онлайн, пока вы ее перемещаете.
Если перемещаемый индекс равен , а не кластеризованный индекс, затем замените UNIQUE CLUSTERED
выше на NONCLUSTERED
Чтобы переместить таблицу кучи, добавьте в нее кластеризованный индекс, затем выполните приведенный выше оператор, чтобы переместить его в другую файловую группу, а затем отбросьте индекс.
Теперь вернитесь и запустите sp_help
для своей таблицы и проверьте результаты, чтобы увидеть, где теперь находятся данные вашей таблицы и индекса.
Если ваша таблица имеет более одного индекса, затем после выполнения приведенного выше оператора для перемещения кластеризованного индекса, sp_helpindex
покажет, что ваш кластеризованный индекс находится в новой файловой группе, но все остальные индексы все еще будут в исходной файловой группе.Таблица продолжит нормально функционировать, но у вас должна быть веская причина, по которой вы хотите, чтобы индексы находились в разных файловых группах.Если вы хотите, чтобы таблица и все ее индексы находились в одной и той же файловой группе, повторите приведенные выше инструкции для каждого индекса, подставив при необходимости CREATE [NONCLUSTERED, or other] ... DROP EXISTING...
, в зависимости от типа перемещаемого вами индекса.