index_option (Transact-SQL)

Определяет набор параметров, которые могут применятся к индексу, являющемуся частью определения ограничения, созданному при помощи инструкции ALTER TABLE.

Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск).

Значок ссылки на раздел Синтаксические обозначения в Transact-SQL

Синтаксис

{ 
    PAD_INDEX = { ON | OFF }
  | FILLFACTOR = fillfactor
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { ON | OFF }
  | ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS = { ON | OFF }
  | SORT_IN_TEMPDB = { ON | OFF } 
  | ONLINE = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = { NONE |ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }
      [ ON PARTITIONS ( { <partition_number_expression> | <range> } 
      [ , ...n ] ) ]
  | ONLINE = { ON [ ( <low_priority_lock_wait> ) ] | OFF }
}

<range> ::= 
<partition_number_expression> TO <partition_number_expression>

<single_partition_rebuild__option> ::=
{
    SORT_IN_TEMPDB = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = {NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE } }
  | ONLINE = { ON [ ( <low_priority_lock_wait> ) ] | OFF }
}

<low_priority_lock_wait>::=
{
    WAIT_AT_LOW_PRIORITY ( MAX_DURATION = <time> [ MINUTES ] , 
                           ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS } ) 
}

Аргументы

  • PAD_INDEX = { ON | OFF }

    Применимо для следующих объектов: С SQL Server 2008 по SQL Server 2014 включительно.

    Определяет разреженность индекса. Значение по умолчанию — OFF.

    • ON
      Процент свободного места, определяемый параметром FILLFACTOR, применяется к страницам индекса промежуточного уровня.

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

  • FILLFACTOR **=**fillfactor

    Применимо для следующих объектов: С SQL Server 2008 по SQL Server 2014 включительно.

    Определяет величину в процентах, показывающую насколько должен компонент Компонент Database Engine заполнять конечный уровень каждой страницы индекса во время его создания и изменения. Заданное значение должно быть целым числом от 1 до 100. Значение по умолчанию — 0.

    Примечание

    Значения коэффициента заполнения 0 и 100 одинаковы во всех отношениях.

  • IGNORE_DUP_KEY = { ON | OFF }
    Определяет ответ на ошибку, случающуюся, когда операция вставки пытается вставить в уникальный индекс повторяющиеся значения ключа. Параметр IGNORE_DUP_KEY применяется только к операциям вставки, производимым после создания или перестроения индекса. Параметр не работает во время выполнения инструкции CREATE INDEX, ALTER INDEX или UPDATE. Значение по умолчанию — OFF.

    • ON
      Если в уникальный индекс вставляются повторяющиеся значения ключа, выводится предупреждающее сообщение. С ошибкой завершаются только строки, нарушающие ограничение уникальности.

    • OFF
      Если в уникальный индекс вставляются повторяющиеся значения ключа, выводится сообщение об ошибке. Будет выполнен откат всей операции INSERT.

    IGNORE_DUP_KEY нельзя установить в значение ON для индексов, создаваемых для представлений, неуникальных индексов, XML-индексов, пространственных индексов и фильтруемых индексов.

    Для просмотра значения IGNORE_DUP_KEY используйте sys.indexes.

    Для обратной совместимости синтаксиса аргумент WITH IGNORE_DUP_KEY эквивалентен аргументу WITH IGNORE_DUP_KEY = ON.

  • STATISTICS_NORECOMPUTE = { ON | OFF }
    Указывает, пересчитаны ли статистики. Значение по умолчанию — OFF.

    • ON
      Устаревшие статистики не пересчитываются автоматически.

    • OFF
      Автоматическое обновление статистических данных включено.

  • ALLOW_ROW_LOCKS = { ON | OFF }

    Применимо для следующих объектов: С SQL Server 2008 по SQL Server 2014 включительно.

    Указывает, разрешена ли блокировка строк. Значение по умолчанию — ON.

    • ON
      Блокировки строк допустимы при доступе к индексу. Компонент Компонент Database Engine определяет, когда используются блокировки строки.

    • OFF
      Блокировки строк не используются.

  • ALLOW_PAGE_LOCKS = { ON | OFF }

    Применимо для следующих объектов: С SQL Server 2008 по SQL Server 2014 включительно.

    Указывает, разрешена ли блокировка страниц. Значение по умолчанию — ON.

    • ON
      Блокировки страниц возможны при доступе к индексу. Необходимость в блокировке строк определяет компонент Компонент Database Engine.

    • OFF
      Блокировки страниц не используются.

  • SORT_IN_TEMPDB = { ON | OFF }

    Применимо для следующих объектов: С SQL Server 2008 по SQL Server 2014 включительно.

    Указывает, сохраняются ли результаты сортировки в tempdb. Значение по умолчанию — OFF.

    • ON
      Промежуточные результаты сортировки, которые используются при индексировании, хранятся в базе данных tempdb. Это может уменьшить время, необходимое для создания индекса, если база данных tempdb и база данных пользователя находятся на разных наборах дисков. Однако это увеличивает использование места на диске, которое используется при индексировании.

    • OFF
      Промежуточные результаты сортировки хранятся в той же базе данных, где и индекс.

  • ONLINE = { ON | OFF }

    Применимо для следующих объектов: С SQL Server 2008 по SQL Server 2014 включительно.

    Определяет, будут ли базовые таблицы и связанные индексы доступны для запросов и изменения данных во время операций с индексами. Значение по умолчанию — OFF. REBUILD может выполняться как операция в режиме ONLINE.

    Примечание

    Уникальные некластеризованные индексы нельзя создавать в режиме в сети.К ним относятся индексы, создаваемые из-за ограничений UNIQUE и PRIMARY KEY.

    • ON
      Долгосрочные блокировки таблицы не поддерживаются во время операций с индексами. Во время главной фазы операций с индексами только блокировка с намерением совмещаемого доступа (IS) удерживается в исходной таблице. Это включает запросы или обновления применительно к обрабатываемой базовой таблице и индексам. В начале операции совмещаемая блокировка (S) удерживается на исходном объекте в течение очень короткого времени. В конце операции на источнике на короткое время удерживается совмещаемая блокировка (S), если создается некластеризованный индекс. Если в режиме в сети создается или удаляется кластеризованный индекс и, если перестраивается кластеризованный или некластеризованный индекс, удерживается блокировка SCH-M (изменения схемы). Хотя блокировки индекса в сети — это короткие блокировки метаданных, но блокировка изменения схемы (Sch-M) должна ожидать завершения всех блокирующих транзакций для этой таблицы. Во время ожидания Sch-M блокирует все другие транзакции, ожидающие за этой блокировкой доступа к одной таблице. При создании индекса для временной локальной таблицы параметр ONLINE не может принимать значение ON.

      Примечание

      Перестроение индекса в режиме «в сети» может задать параметры low_priority_lock_wait, описанные ниже в этом разделе.low_priority_lock_wait управляет приоритетом блокировки S и Sch-M во время операции перестроения индекса в режиме «в сети».

    • OFF
      Блокировки таблиц применяются во время выполнения операций с индексами. Это предотвращает доступ к базовой таблице всех пользователей во время операции. Блокировку изменения схемы (Sch-M) в таблице получает операция с индексами вне сети, которая создает, перестраивает или удаляет кластеризованный индекс либо перестраивает или удаляет некластеризованный индекс. Это предотвращает доступ к базовой таблице всех пользователей во время операции. Операция с индексами вне сети, создающая некластеризованный индекс, получает совмещаемую блокировку (S) в таблице. Это запрещает проводить обновления базовой таблицы, но разрешает проводить операции чтения, например инструкции SELECT.

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

    Примечание

    Операции с индексами в сети доступны не во всех выпусках Microsoft SQL Server.Перечень функций, поддерживаемых в разных выпусках SQL Server, см. в разделе Функции, поддерживаемые различными выпусками SQL Server 2014.

  • MAXDOP **=**max_degree_of_parallelism

    Применимо для следующих объектов: С SQL Server 2008 по SQL Server 2014 включительно.

    Переопределяет параметр конфигурации max degree of parallelism на время операций с индексами. Дополнительные сведения см. в разделе Настройка параметра конфигурации сервера max degree of parallelism. MAXDOP можно использовать для ограничения числа процессоров, используемых в одновременном выполнении планов. Максимальное число процессоров — 64.

    Аргумент max_degree_of_parallelism может иметь следующие значения.

    • 1
      Подавляет формирование параллельных планов.

    • >1
      Ограничивает указанным значением максимальное число процессоров, используемых для параллельных операций с индексами.

    • 0 (по умолчанию)
      В зависимости от текущей рабочей нагрузки системы использует реальное или меньшее число процессоров.

    Дополнительные сведения см. в разделе Настройка параллельных операций с индексами.

    Примечание

    Параллельные операции с индексами доступны не во всех выпусках Microsoft SQL Server.Перечень функций, поддерживаемых выпусками SQL Server, см. в разделе Функции, поддерживаемые различными выпусками SQL Server 2014.

  • DATA_COMPRESSION

    Применимо для следующих объектов: С SQL Server 2008 по SQL Server 2014 включительно.

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

    • NONE
      Таблица или указанные секции не сжимаются. Применяется только к таблицам rowstore, не относится к таблицам columnstore.

    • ROW
      Таблицы или указанные секции сжимаются, используя сжатие строк. Применяется только к таблицам rowstore, не относится к таблицам columnstore.

    • PAGE
      Таблицы или указанные секции сжимаются, используя сжатие страниц. Применяется только к таблицам rowstore, не относится к таблицам columnstore.

    • COLUMNSTORE

      Применимо для следующих объектов: С SQL Server 2014 по SQL Server 2014 включительно.

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

    • COLUMNSTORE_ARCHIVE

      Применимо для следующих объектов: С SQL Server 2014 по SQL Server 2014 включительно.

      Применяется только к таблицам columnstore, представляющим собой таблицы, которые хранятся с кластеризованным индексом columnstore. Параметр COLUMNSTORE_ARCHIVE обеспечивает дальнейшее сжатие указанной секции до еще меньшего размера. Это может использоваться для архивации или в других ситуациях, где требуется уменьшение объема пространства и допускается увеличение затрат времени на хранение и извлечение.

    Дополнительные сведения о сжатии см. в разделе Сжатие данных.

  • ON PARTITIONS ( { <partition_number_expression> | <range> } [ ,...n ] )

    Применимо для следующих объектов: С SQL Server 2008 по SQL Server 2014 включительно.

    Указывает секции, к которым применяется параметр DATA_COMPRESSION. Если таблица не секционирована, аргумент ON PARTITIONS приведет к формированию ошибки. Если не указано предложение ON PARTITIONS, параметр DATA_COMPRESSION применяется ко всем секциям секционированной таблицы.

    <Выражение_номера_секции> можно указать одним из следующих способов.

    • Указав номер секции, например: ON PARTITIONS (2).

    • Указав номера нескольких секций, разделив их запятыми, например ON PARTITIONS (1, 5).

    • Указав диапазоны секций и отдельные секции, например ON PARTITIONS (2, 4, 6 TO 8).

    <Диапазон> можно указать номерами секций, разделенными ключевым словом TO, например: ON PARTITIONS (6 TO 8).

    Чтобы для разных секций задать разные типы сжатия данных, укажите параметр DATA_COMPRESSION несколько раз, например следующим образом.

    --For rowstore tables
    REBUILD WITH 
    (
    DATA_COMPRESSION = NONE ON PARTITIONS (1), 
    DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8), 
    DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5)
    )
    
    --For columnstore tables
    REBUILD WITH 
    (
    DATA_COMPRESSION = COLUMNSTORE ON PARTITIONS (1, 3, 5), 
    DATA_COMPRESSION = COLUMNSTORE_ARCHIVE ON PARTITIONS (2, 4, 6 TO 8)
    )
    
  • <single_partition_rebuild__option>
    В большинстве случаев при перестроении индекса перестраиваются все секции секционированного индекса. Следующие параметры при применении к одному разделу не перестраивают все секции.

    • SORT_IN_TEMPDB

    • MAXDOP

    • DATA_COMPRESSION

  • low_priority_lock_wait

    Применимо для следующих объектов: С SQL Server 2014 по SQL Server 2014 включительно.

    SWITCH или перестроение индекса в сети завершается, как только не остается блокирующих таблицу операций. Значение WAIT_AT_LOW_PRIORITY указывает, что если операция SWITCH или перестроение индекса в сети не может быть выполнено немедленно, то эти операции будут переведены в режим ожидания. Операция будет удерживать блокировки с низким приоритетом, чтобы другие операции, удерживающие блокировки, конфликтующие с инструкцией DDL, могли выполняться дальше. Пропуск параметра WAIT AT LOW PRIORITY эквивалентен WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE).

  • MAX_DURATION = time [MINUTES ]
    Время ожидания (целочисленное значение, указанное в минутах) при выполнении команды DDL для операции SWITCH или получаемой блокировки по операции перестроения индекса в режиме «в сети». Будет выполнена попытка немедленного запуска операции SWITCH или перестроения индекса в режиме «в сети». Если операция будет заблокирована на время MAX_DURATION, будет выполнено одно из действий ABORT_AFTER_WAIT. Время MAX_DURATION всегда указывается в минутах, и слово MINUTES можно опустить.

  • ABOUT_AFTER_WAIT = [NONE | SELF | BLOCKERS } ]

    • NONE
      Продолжение операции SWITCH или перестроение индекса в сети без изменения приоритета блокировки (с помощью обычного приоритета).

    • SELF
      Прекращение операции SWITCH или DDL по перестроению индекса в сети, выполняемой в данный момент, без какого-либо действия.

    • BLOCKERS
      Остановка всех пользовательских транзакций, в данный момент блокирующих операцию SWITCH или операцию DDL по перестроению индекса в сети, чтобы можно было продолжить данную операцию.

      Требуется разрешение ALTER ANY CONNECTION.

Замечания

Полное описание параметров индекса приведено в разделе CREATE INDEX (Transact-SQL).

См. также

Справочник

ALTER TABLE (Transact-SQL)

column_constraint (Transact-SQL)

computed_column_definition (Transact-SQL)

table_constraint (Transact-SQL)