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.
- 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)
CREATE PARTITION FUNCTION (Transact-SQL)
CREATE PARTITION SCHEME (Transact-SQL)
sys.index_columns (Transact-SQL)