Перенос существующего индекса в другую файловую группу

Применимо к:SQL Server Управляемый экземпляр SQL Azure

В этом разделе описывается перемещение существующего индекса из текущей файловой группы в другую файловую группу в SQL Server с помощью SQL Server Management Studio или Transact-SQL.

Рекомендации по проектированию, а также сведения о том, почему может потребоваться разместить некластеризованный индекс в другой файловой группе, см. в разделе Размещение индекса в файловых группах или схемах секционирования.

Подготовка к работе

ограничения

  • Если таблица имеет кластеризованный индекс, то перемещение кластеризованного индекса в новую файловую группу перемещает в эту файловую группу саму таблицу.

  • Невозможно переместить индексы, созданные с помощью ограничения UNIQUE или PRIMARY KEY с помощью Management Studio. Чтобы переместить эти индексы, используйте инструкцию CREATE INDEX с параметром (DROP_EXISTING=ON) в Transact-SQL.

Безопасность

Разрешения

Необходимо разрешение ALTER для таблицы или представления. Пользователь должен быть членом предопределенной роли сервера sysadmin или предопределенных ролей базы данных db_ddladmin и db_owner.

Использование SQL Server Management Studio

Перемещение существующего индекса в другую файловую группу с помощью конструктора таблиц

  1. В обозревателе объектов щелкните знак «плюс», чтобы развернуть базу данных, содержащую таблицу, где находится индекс, который нужно переместить.

  2. Чтобы развернуть папку Таблицы , щелкните значок «плюс».

  3. Щелкните правой кнопкой мыши таблицу, содержащую индекс, который нужно переместить, и выберите пункт Конструктор.

  4. В меню Конструктор таблиц выберите пункт Индексы и ключи.

  5. Выберите индекс, который нужно переместить.

  6. В основной сетке разверните узел Спецификация пространства данных.

  7. Выберите значение Имя файловой группы или схемы секционирования и выберите из списка файловую группу или схему секционирования, в которую нужно переместить индекс.

  8. Нажмите кнопку Закрыть.

  9. В меню Файл выберите пункт Сохранитьимя_таблицы.

Перемещение существующего индекса в другую файловую группу в обозревателе объектов

  1. В обозревателе объектов щелкните знак «плюс», чтобы развернуть базу данных, содержащую таблицу, где находится индекс, который нужно переместить.

  2. Чтобы развернуть папку Таблицы , щелкните значок «плюс».

  3. Щелкните знак «плюс», чтобы развернуть таблицу, содержащую индекс, который необходимо переместить.

  4. Чтобы развернуть папку Индексы , щелкните знак «плюс» (+).

  5. Щелкните правой кнопкой мыши индекс, который нужно переместить, и выберите пункт Свойства.

  6. В разделе Выбор страницывыберите пункт Хранение.

  7. Выберите файловую группу, в которую необходимо переместить индекс.

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

    если перемещается кластеризованный индекс, можно использовать обработку в сети. Обработка в сети разрешает одновременный доступ пользователей к основным данным и к некластеризованным индексам в течение операции с индексами. Дополнительные сведения см. в статье Выполнение операции с индексами в сети.

    На компьютерах с несколькими обработчиками с помощью SQL Server можно настроить количество процессоров, используемых для выполнения инструкции индекса, указав максимальную степень параллелизма. Функция параллельных операций с индексами недоступна в каждом выпуске SQL Server. Сведения о функциях, поддерживаемых различными выпусками SQL Server, см. в статье Возможности, поддерживаемые выпусками SQL Server 2016. Дополнительные сведения об операциях параллельного индекса см. в разделе "Настройка параллельных операций с индексами".

  8. Щелкните OK.

На странице Хранение диалогового окна Свойства индекса ―имя_индекса доступны следующие сведения:

Файловая группа
Сохраняет индекс в указанной файловой группе. Этот список содержит только стандартные файловые группы (ROW). По умолчанию из этого списка выбирается первичная файловая группа (PRIMARY) текущей базы данных.

Файловая группа файлового потока
Задает файловую группу для данных FILESTREAM. Этот список содержит только файловые группы FILESTREAM. По умолчанию из этого списка выбирается файловая группа PRIMARY FILESTREAM.

Схема секционирования
Хранит индекс в схеме секционирования. Если нажать кнопку Схема секционирования , активируется сетка внизу. По умолчанию из списка выбирается схема секционирования, использованная для хранения данных таблицы. При выборе из списка другой схемы секционирования данные в сетке обновляются.

Параметр схемы секционирования недоступен, если в базе данных нет ни одной схемы секционирования.

Схема секционирования файлового потока
Задает схему секционирования для данных FILESTREAM. Схема секционирования должна быть симметрична схеме, указанной в параметре Схема секционирования .

Если таблица не секционирована, это поле пусто.

Параметр схемы секционирования
Отображает имя столбца, участвующего в схеме секционирования.

Столбец таблицы
Выберите таблицу или представление для сопоставления схеме секционирования.

Тип данных столбца
Выводит сведения о типах данных для данного столбца.

Примечание.

Если это вычисляемый столбец, в поле Тип данных столбца отображается отметка "вычисляемый столбец".

Разрешить обработку в сети DML-инструкций во время переноса индекса
Параметр дает пользователям возможность получать доступ к данным базовой таблицы или кластеризованного индекса, а также к любым связанным с ними некластеризованным индексам при операциях с индексами.

Примечание.

Этот параметр недоступен для XML-индексов, а также в случае, если индекс является отключенным кластеризованным индексом.

Укажите максимальную степень параллелизма
Ограничивает число процессоров, используемых в одновременном исполнении планов. При значении по умолчанию 0 используется реальное число доступных ЦП. При установке значения 1 создание параллельных планов становится невозможным; при установке значения больше 1 ограничивается максимальное число процессоров, используемых для выполнения одного запроса. Этот параметр становится доступным только в случае, если диалоговое окно находится в состоянии Перестроение или Повторное создание .

Примечание.

Если задано значение, превышающее число доступных ЦП, используется фактическое число доступных ЦП.

Использование Transact-SQL

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

  1. В обозревателе объектов подключитесь к экземпляру ядра СУБД.

  2. На стандартной панели выберите пункт Создать запрос.

  3. Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить.

    USE AdventureWorks2022;  
    GO  
    -- Creates the TransactionsFG1 filegroup on the AdventureWorks2022 database  
    ALTER DATABASE AdventureWorks2022  
    ADD FILEGROUP TransactionsFG1;  
    GO  
    /* Adds the TransactionsFG1dat3 file to the TransactionsFG1 filegroup. Please note that you will have to change the filename parameter in this statement to execute it without errors.  
    */  
    ALTER DATABASE AdventureWorks2022   
    ADD FILE   
    (  
        NAME = TransactionsFG1dat3,  
        FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL13\MSSQL\DATA\TransactionsFG1dat3.ndf',  
        SIZE = 5MB,  
        MAXSIZE = 100MB,  
        FILEGROWTH = 5MB  
    )  
    TO FILEGROUP TransactionsFG1;  
    GO  
    /*Creates the IX_Employee_OrganizationLevel_OrganizationNode index  
      on the TransactionsPS1 filegroup and drops the original IX_Employee_OrganizationLevel_OrganizationNode index.  
    */  
    CREATE NONCLUSTERED INDEX IX_Employee_OrganizationLevel_OrganizationNode  
        ON HumanResources.Employee (OrganizationLevel, OrganizationNode)  
        WITH (DROP_EXISTING = ON)  
        ON TransactionsFG1;  
    GO  
    

Следующие шаги

Дополнительные сведения см. в статье CREATE INDEX (Transact-SQL).

Руководство по архитектуре и разработке индексов SQL Server