ALTER TABLE index_option (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure базе данных SQL в Microsoft Fabric
Определяет набор параметров, которые могут применяться к индексу, являющемуся частью определения ограничения, созданному с помощью инструкции ALTER TABLE.
Полное описание параметров индекса см. в разделе CREATE INDEX.
Соглашения о синтаксисе 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 }
| OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | OFF }
| SORT_IN_TEMPDB = { ON | OFF }
| MAXDOP = max_degree_of_parallelism
| DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }
[ ON PARTITIONS ( { <partition_number_expression> | <range> }
[ , ...n ] ) ]
| XML_COMPRESSION = { ON | OFF }
[ ON PARTITIONS ( { <partition_number_expression> | <range> }
[ , ...n ] ) ]
| ONLINE = { ON | OFF }
| RESUMABLE = { ON | OFF }
| MAX_DURATION = <time> [ MINUTES ]
}
<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 (10.0.x) и более поздних версий
Определяет разреженность индекса. Значение по умолчанию — OFF
.
DNS
Процент свободного места, определяемый параметром
FILLFACTOR
, применяется к страницам индекса промежуточного уровня.OFF или fillfactor не указан
Страницы промежуточного уровня заполнены почти в соответствии их производительным возможностям, на них остается место как минимум для одной строки максимального размера, какой только может иметь индекс, с заданным набором ключей на промежуточных страницах.
FILLFACTOR = fillfactor
Область применения: SQL Server 2008 (10.0.x) и более поздних версий
Указывает процент, указывающий, насколько полный ядро СУБД должен сделать конечный уровень каждой страницы индекса во время создания или изменения индекса. Заданное значение должно быть целым числом от 1 до 100. По умолчанию установлено значение 0.
Примечание.
Значения коэффициента заполнения 0 и 100 одинаковы во всех отношениях.
IGNORE_DUP_KEY = { ON | OFF }
Определяет тип ответа, когда операция вставки пытается вставить в уникальный индекс повторяющиеся значения ключа. Параметр IGNORE_DUP_KEY
применяется только к операциям вставки, производимым после создания или перестроения индекса. Параметр не работает во время выполнения инструкции CREATE INDEX, ALTER INDEX или UPDATE. Значение по умолчанию — OFF
.
DNS
Если в уникальный индекс вставляются повторяющиеся значения ключа, выводится предупреждающее сообщение. С ошибкой завершаются только строки, нарушающие ограничение уникальности.
ВЫКЛ.
Если в уникальный индекс вставляются повторяющиеся значения ключа, выводится сообщение об ошибке. Выполняется откат всей
INSERT
операции.
IGNORE_DUP_KEY
Невозможно задать ON
для индексов, созданных в представлении, неуникаемых индексах, XML-индексах, пространственных индексах и отфильтрованных индексах.
Для просмотра значения IGNORE_DUP_KEY
используйте sys.indexes.
Для обратной совместимости синтаксиса аргумент WITH IGNORE_DUP_KEY
эквивалентен WITH IGNORE_DUP_KEY = ON
.
STATISTICS_NORECOMPUTE = { ON | OFF }
Отключите или включите параметр автоматического обновления статистики для статистики, AUTO_STATISTICS_UPDATE
связанной с указанными индексами. Значение по умолчанию — OFF
.
DNS
Автоматические обновления статистики отключаются после перестроения индекса.
ВЫКЛ.
Автоматические обновления статистики включены после перестроения индекса.
Чтобы восстановить автоматическое обновление статистики, задайте STATISTICS_NORECOMPUTE
значение OFF
или выполните без предложения.NORECOMPUTE
UPDATE STATISTICS
Предупреждение
При отключении автоматического обновления статистики может препятствовать выбору оптимизатора запросов оптимальных планов выполнения для запросов, включающих таблицу. Этот параметр следует использовать щадя и только квалифицированным администратором базы данных.
Этот параметр не предотвращает автоматическое обновление с полным сканированием статистики, связанной с индексом, во время операции перестроения.
ALLOW_ROW_LOCKS = { ON | OFF }
Область применения: SQL Server 2008 (10.0.x) и более поздних версий
Указывает, разрешена ли блокировка строк. Значение по умолчанию — ON.
DNS
Блокировки строк допустимы при доступе к индексу. Ядро СУБД определяет, когда используются блокировки строк.
ВЫКЛ.
Блокировки строк не используются.
ALLOW_PAGE_LOCKS = { ON | OFF }
Область применения: SQL Server 2008 (10.0.x) и более поздних версий
Указывает, разрешена ли блокировка страниц. Значение по умолчанию — ON.
DNS
Блокировки страниц возможны при доступе к индексу. Ядро СУБД определяет, когда используются блокировки страниц.
ВЫКЛ.
Блокировки страниц не используются.
OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | OFF }
Область применения: SQL Server 2019 (15.x) и более поздних версий
Определяет, следует ли выполнять оптимизацию, связанную с состязанием при операциях вставки на последнюю страницу. Значение по умолчанию — OFF
. Дополнительные сведения см. в разделе "Последовательные ключи " статьи CREATE INDEX
.
SORT_IN_TEMPDB = { ON | OFF }
Область применения: SQL Server 2008 (10.0.x) и более поздних версий
Указывает, следует ли хранить результаты tempdb
сортировки. Значение по умолчанию — OFF
.
DNS
Промежуточные результаты сортировки, используемые для построения индекса, хранятся в
tempdb
. Это может сократить время, необходимое для создания индекса, еслиtempdb
находится на другом наборе дисков, отличных от пользовательской базы данных. Однако это увеличивает использование места на диске, которое используется при индексировании.ВЫКЛ.
Промежуточные результаты сортировки хранятся в той же базе данных, где и индекс.
ONLINE = { ON | OFF }
Область применения: SQL Server 2008 (10.0.x) и более поздних версий
Определяет, будут ли базовые таблицы и связанные индексы доступны для запросов и изменения данных во время операций с индексами. Значение по умолчанию — OFF
. REBUILD
можно выполнить как ONLINE
операцию.
Примечание.
Уникальные некластеризованные индексы нельзя создавать в Сети. Сюда входят индексы, созданные из-за UNIQUE
или PRIMARY KEY
ограничения.
DNS
Долгосрочные блокировки таблицы не выполняются во время операций с индексами. Во время главной фазы операций с индексами только блокировка с намерением совмещаемого доступа (IS) удерживается в исходной таблице. Это включает запросы или обновления применительно к обрабатываемой базовой таблице и индексам. В начале операции блокировка shared (S) хранится в исходном объекте в течение короткого периода времени. В конце операции в течение короткого периода времени блокировка S (Shared) приобретается в источнике, если создается некластеризованный индекс; или блокировка Sch-M (Изменение схемы) приобретается при создании или удалении кластеризованного индекса в сети, а также при перестроении кластеризованного или некластеризованного индекса. Хотя блокировки индекса в сети — это короткие блокировки метаданных, но блокировка изменения схемы (Sch-M) должна ожидать завершения всех блокирующих транзакций для этой таблицы. В этот период ожидания блокировка Sch-M блокирует все другие транзакции, которые получат доступ к этой таблице только после завершения блокировки.
ONLINE
Невозможно задатьON
значение, если индекс создается в локальной временной таблице.Примечание.
Перестроение индекса в режиме "в сети" может задать параметры low_priority_lock_wait, описанные ниже в этом разделе. low_priority_lock_wait управляет приоритетом блокировки S и Sch-M во время операции перестроения индекса в режиме "в сети".
ВЫКЛ.
Блокировки таблиц применяются при выполнении операций с индексами. Это предотвращает доступ к базовой таблице всех пользователей во время выполнения операции. Блокировку изменения схемы (Sch-M) в таблице получает операция с индексами вне сети, которая создает, перестраивает или удаляет кластеризованный индекс либо перестраивает или удаляет некластеризованный индекс. Это предотвращает доступ к базовой таблице всех пользователей во время выполнения операции. Операция с индексами вне сети, создающая некластеризованный индекс, получает совмещаемую блокировку (S) в таблице. Это предотвращает обновление базовой таблицы, но разрешает операции чтения, такие как
SELECT
операторы.
Дополнительные сведения см. в разделе Об операциях с индексами в режиме "в сети".
Примечание.
Операции с индексами в Сети недоступны в каждом выпуске Microsoft SQL Server. Список функций, поддерживаемых выпусками SQL Server, см. в выпусках и поддерживаемых функциях SQL Server 2022.
RESUMABLE = { ON | OFF}
Область применения: SQL Server 2022 (16.x) и более поздних версий
Указывает, является ли операция ALTER TABLE ADD CONSTRAINT
возобновляемой. Операция добавления табличного ограничения будет возобновляемой при значении ON
. При добавлении OFF
операции ограничения таблицы невозможно возобновить. По умолчанию — OFF
. Если параметру RESUMABLE
задано значение ON
, то требуется параметр ONLINE = ON
.
MAX_DURATION
При использовании с RESUMABLE = ON
(требуется ONLINE = ON
) указывает время (целочисленное значение, указанное в минутах), которое выполняется повторной операцией ограничения в сети перед приостановкой. Если этот параметр не указан, операция продолжается вплоть до завершения. MAXDOP
также поддерживается RESUMABLE = ON
.
Дополнительные сведения об активации и использовании возобновляемых операций ALTER TABLE ADD CONSTRAINT
: Возобновляемое добавление табличных ограничений.
MAXDOP = max_degree_of_parallelism
Область применения: SQL Server 2008 (10.0.x) и более поздних версий
Переопределяет параметр конфигурации максимальной степени параллелизма на время выполнения операции с индексами. Дополнительные сведения см. в разделе "Настройка максимальной степени параллелизма" (параметр конфигурации сервера). Используется MAXDOP
для ограничения количества процессоров, используемых в параллельном выполнении плана. Максимальное число процессоров — 64.
Параметр max_degree_of_parallelism может иметь одно из следующих значений:
1
: подавляет параллельное создание плана.>1
: ограничивает максимальное число процессоров, используемых в параллельной операции индекса, указанным числом.0
(по умолчанию): использует фактическое количество процессоров или меньше на основе текущей системной рабочей нагрузки.
Дополнительные сведения см. в статье Настройка параллельных операций с индексами.
Примечание.
Параллельные операции индексов недоступны в каждом выпуске Microsoft SQL Server. Список функций, поддерживаемых выпусками SQL Server, см. в выпусках и поддерживаемых функциях SQL Server 2022.
DATA_COMPRESSION
Область применения: SQL Server 2008 (10.0.x) и более поздних версий
Задает режим сжатия данных для указанной таблицы, номера секции или диапазона секций. Существуют следующие варианты выбора.
NONE
Таблица или указанные секции не сжимаются. Применяется только к таблицам rowstore; не относится к таблицам columnstore.
ROW
Таблицы или указанные секции сжимаются, используя сжатие строк. Применяется только к таблицам rowstore; не относится к таблицам columnstore.
СТРАНИЦА
Таблицы или указанные секции сжимаются, используя сжатие страниц. Применяется только к таблицам rowstore; не относится к таблицам columnstore.
COLUMNSTORE
Область применения: SQL Server 2014 (12.x) и более поздних версий
Применяется только к таблицам columnstore.
COLUMNSTORE
указывает, чтобы распаковывать секцию, которая была сжатаCOLUMNSTORE_ARCHIVE
с помощью параметра. При восстановленииCOLUMNSTORE
данных индекс продолжает сжиматься с помощью сжатия columnstore, используемого для всех таблиц columnstore.COLUMNSTORE_ARCHIVE
Область применения: SQL Server 2014 (12.x) и более поздних версий
Применяется только к таблицам columnstore, представляющим собой таблицы, которые хранятся с кластеризованным индексом columnstore.
COLUMNSTORE_ARCHIVE
дополнительно сжимает указанную секцию до меньшего размера. Это может использоваться для архивации или в других ситуациях, где требуется уменьшение объема пространства и допускается увеличение затрат времени на хранение и извлечение.
Дополнительные сведения о сжатии см. в разделе Сжатие данных.
XML_COMPRESSION
Область применения: SQL Server 2022 (16.x) и более поздних версий, База данных SQL Azure и Управляемый экземпляр SQL Azure.
Задает параметр сжатия XML для всех столбцов с типом данных xml в таблице. Существуют следующие варианты выбора.
DNS
Столбцы, использующие тип данных xml, сжимаются.
ВЫКЛ.
Столбцы, использующие тип данных xml, не сжимаются.
ON PARTITIONS ( { <partition_number_expression> | <range> } [ ,...n ] )
Область применения: SQL Server 2008 (10.0.x) и более поздних версий
Указывает разделы, к которым применяется параметр DATA_COMPRESSION
или XML_COMPRESSION
. Если таблица не секционирована, ON PARTITIONS
аргумент создает ошибку. ON PARTITIONS
Если предложение не указано, DATA_COMPRESSION
XML_COMPRESSION
параметр применяется ко всем секциям секционированных таблиц.
<partition_number_expression>
можно указать одним из следующих способов.
- Укажите номер секции, например:
ON PARTITIONS (2)
- указав номера нескольких секций, разделив их запятыми, например
ON PARTITIONS (1, 5)
; - указав диапазоны секций и отдельные секции, например
ON PARTITIONS (2, 4, 6 TO 8)
;
<range>
можно указать в виде номеров секций, разделенных ключевым словом 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
XML_COMPRESSION
low_priority_lock_wait
Область применения: SQL Server 2014 (12.x) и более поздних версий
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 = время [ МИНУТы ]
Время ожидания (целочисленное значение, указанное в минутах), SWITCH
которое необходимо получить или в сети, ожидает при выполнении команды DDL. Операция SWITCH
перестроения индекса в сети выполняется немедленно. Если операция заблокирована в течение MAX_DURATION
времени, выполняется одно из ABORT_AFTER_WAIT
действий. MAX_DURATION
время всегда находится в минутах, и слово MINUTES
может быть опущено.
ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS }
NONE
SWITCH
Продолжает операцию перестроения индекса в Сети без изменения приоритета блокировки (с помощью регулярного приоритета).SELF
Завершает
SWITCH
операцию перестроения DDL или в сети, не выполняя никаких действий.BLOCKERS
Удаляет все транзакции пользователей, которые блокируют в настоящее время
SWITCH
операцию перестроения DDL или онлайн-индекса, чтобы операция продолжалось.BLOCKERS
ALTER ANY CONNECTION
требует разрешения.