CREATE COLUMNSTORE INDEX (Transact-SQL)

Создает индекс columnstore для указанной таблицы. Индекс columnstore с оптимизацией для памяти xVelocity представляет собой разновидность сжатого некластеризованного индекса. Должно быть не более одного индекса columnstore в каждой таблице. Индекс может быть создан до появления данных в таблице. Невозможно обновить таблицу с индексом columnstore. Дополнительные сведения об использовании индексов columnstore см. в разделе Индексы columnstore.

ПримечаниеПримечание

Дополнительные сведения о создании реляционного индекса см. в разделе CREATE INDEX (Transact-SQL). Дополнительные сведения о создании XML-индексов см. в разделе CREATE XML INDEX (Transact-SQL). Дополнительные сведения о создании пространственного индекса см. в разделе CREATE SPATIAL INDEX (Transact-SQL).

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

Синтаксис

CREATE [ NONCLUSTERED ] COLUMNSTORE INDEX index_name 
    ON <object> ( column  [ ,...n ] )
    [ WITH ( <column_index_option> [ ,...n ] ) ]
    [ ON {
           { partition_scheme_name ( column_name ) } 
           | filegroup_name 
           | "default" 
         }
    ]
[ ; ]

<object> ::=
{
    [database_name. [schema_name ] . | schema_name . ]
     table_name
{

<column_index_option> ::=
{
      DROP_EXISTING = { ON | OFF }
    | MAXDOP = max_degree_of_parallelism
 }

Аргументы

  • NONCLUSTERED
    Создает индекс columnstore, задающий логическое упорядочение для таблицы. Кластеризованные индексы columnstore не поддерживаются.

  • COLUMNSTORE
    Указывает, что индекс будет представлять собой индекс columnstore.

  • index_name
    Имя индекса. Имена индексов должны быть уникальными в пределах таблицы или представления, но необязательно должны быть уникальными в пределах базы данных. Имена индексов должны удовлетворять правилам для идентификаторов.

  • column
    Столбец или столбцы, на которых основан индекс. Индекс columnstore может включать не более 1024 столбцов.

  • ON partition_scheme_name**(column_name)**
    Задает схему секционирования, которая определяет файловые группы соответствующие секциям секционированного индекса. Схема секционирования должна быть создана в базе данных путем выполнения инструкции CREATE PARTITION SCHEME. column_name указывает столбец, по которому будет секционирован индекс. Столбец должен соответствовать по типу данных, длине и точности аргументу функции секционирования, используемой аргументом partition_scheme_name. column_name в схеме не обязательно должно соответствовать столбцам из определения индекса. При секционировании индекса columnstore компонент Компонент Database Engine добавляет столбец секционирования как столбец индекса, если этого столбца еще нет в списке.

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

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

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

  • ON "default"
    Создает заданный индекс в файловой группе, используемой по умолчанию.

    Слово «default» в этом контексте не является ключевым. Это идентификатор установленной по умолчанию файловой группы, который должен иметь разделители, как в выражениях ON "default" или ON [default]. Если указано значение «default» (по умолчанию), параметр QUOTED_IDENTIFIER должен иметь значение ON для текущего сеанса. Это значение используется по умолчанию. Дополнительные сведения см. в разделе SET QUOTED_IDENTIFIER (Transact-SQL).

<object>::=

Полное или неполное имя индексируемого объекта.

  • database_name
    Имя базы данных.

  • schema_name
    Имя схемы, которой принадлежит таблица.

  • table_name
    Имя таблицы для индексирования.

<column_index_option>::=

Указывает параметры, которые должны использоваться при создании индекса для столбца.

  • DROP_EXISTING
    Указывает, что именованный существующий индекс удален и перестраивается. Значение по умолчанию — OFF.

    • ON
      Существующий индекс удаляется и перестраивается. Указанное имя индекса должно совпадать с уже существующим индексом, но определение индекса может быть изменено. Например, можно указать другие столбцы или параметры индекса.
    • OFF
      Выдается ошибка, если индекс с указанным именем уже существует. Тип индекса не может быть изменен с помощью аргумента DROP_EXISTING. Для обратной совместимости синтаксиса аргумент WITH DROP_EXISTING эквивалентен аргументу WITH DROP_EXISTING = ON.
  • MAXDOP = max_degree_of_parallelism
    Переопределяет параметр конфигурации Настройка параметра конфигурации сервера max degree of parallelism только на время выполнения операции с индексами. MAXDOP можно использовать для ограничения числа процессоров, используемых при параллельном выполнении планов. Максимальное число процессоров — 64.

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

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

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

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

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

    ПримечаниеПримечание

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

Замечания

Индексы могут создаваться для временной таблицы. При удалении таблицы или в конце сеанса такие индексы удаляются.

Общие типы бизнес-данных могут быть включены в индекс columnstore. Следующие типы данных могут быть включены в индекс columnstore.

  • char и varchar

  • nchar и nvarchar (кроме varchar(max) и nvarchar(max))

  • decimal (и numeric) (кроме как при точности более 18 цифр)

  • int, bigint, smallint и tinyint

  • float (и real)

  • bit

  • money и smallmoney

  • Все типы данных даты и времени (за исключением datetimeoffset, масштаб которых превышает 2)

Следующие типы данных не могут быть включены в индекс columnstore.

  • binary и varbinary

  • ntext, text и image

  • varchar(max) и nvarchar(max)

  • uniqueidentifier

  • rowversion (и timestamp)

  • sql_variant

  • decimal (и numeric) с точностью более 18 цифр

  • Значения типа datetimeoffset, масштаб которых превышает 2

  • Типы CLR (hierarchyid и пространственные типы)

  • xml

Основные ограничения

Индекс columnstore.

  • Не более 1024 столбцов.

  • Не пригоден для кластеризации. Доступны только некластеризованные индексы columnstore.

  • Не может быть уникальным индексом.

  • Не может быть создан для представления или индексированного представления.

  • Не может содержать разреженный столбец.

  • Не может использоваться в качестве первичного ключа или внешнего ключа.

  • Не может быть изменен с помощью инструкции ALTER INDEX. Вместо этого удалите и заново создайте индекс columnstore. (Инструкцию ALTER INDEX можно использовать, чтобы отключить и перестроить индекс columnstore.)

  • Не может быть создан с помощью ключевого слова INCLUDE.

  • Нельзя включать ключевые слова ASC и DESC для сортировки индексов. Индексы columnstore упорядочены в соответствии с алгоритмами сжатия. В результате сортировки можно потерять многие преимущества в производительности.

Индексы columnstore нельзя использовать вместе со следующими функциями:

  • Сжатие страниц и строк, а также формат хранения vardecimal (индекс columnstore уже сжат в другом формате).

  • Репликация

  • Отслеживание изменений

  • Система отслеживания измененных данных

  • Файловый поток

Сведения о преимуществах в производительности и ограничениях индексов columnstore см. в Индексы columnstore.

Разрешения

Требуется разрешение ALTER на таблицу.

Примеры

А.Создание простого некластеризованного индекса

В следующем примере создается простая таблица и кластеризованный индекс, а затем демонстрируется синтаксис для создания индекса columnstore.

CREATE TABLE SimpleTable
(ProductKey [int] NOT NULL, 
OrderDateKey [int] NOT NULL, 
DueDateKey [int] NOT NULL, 
ShipDateKey [int] NOT NULL);
GO
CREATE CLUSTERED INDEX cl_simple ON SimpleTable (ProductKey);
GO
CREATE NONCLUSTERED COLUMNSTORE INDEX csindx_simple
ON SimpleTable
(OrderDateKey, DueDateKey, ShipDateKey);
GO

Б.Создание простого некластеризованного индекса с использованием всех параметров

В следующем примере создается простая таблица и кластеризованный индекс, а затем демонстрируется синтаксис для создания индекса columnstore.

CREATE NONCLUSTERED COLUMNSTORE INDEX csindx_simple
ON SimpleTable
(OrderDateKey, DueDateKey, ShipDateKey)
WITH (DROP_EXISTING =  ON, 
    MAXDOP = 2)
ON "default"
GO

Более сложный пример с использованием секционированных таблиц см. в разделе Индексы columnstore.

См. также

Справочник

sys.column_store_dictionaries (Transact-SQL)

sys.column_store_segments (Transact-SQL)

ALTER INDEX (Transact-SQL)

CREATE PARTITION FUNCTION (Transact-SQL)

CREATE PARTITION SCHEME (Transact-SQL)

DROP INDEX (Transact-SQL)

sys.indexes (Transact-SQL)

sys.index_columns (Transact-SQL)

Основные понятия

Индексы columnstore

Индексы columnstore