INDEX
Внимание
Поддерживается только для строковых таблиц. Поддержка функциональности для колоночных таблиц находится в разработке.
Конструкция INDEX
используется для определения вторичного индекса для строковых таблиц:
CREATE TABLE `<table_name>` (
...
INDEX `<index_name>`
[GLOBAL|LOCAL]
[UNIQUE]
[SYNC|ASYNC]
[USING <index_type>]
ON ( <index_columns> )
[COVER ( <cover_columns> )]
[WITH ( <parameter_name> = <parameter_value>[, ...])]
[, ...]
)
где:
-
GLOBAL/LOCAL
— глобальный или локальный индекс, в зависимости от типа индекса (<index_type>
) может быть доступен только один из них:GLOBAL
— индекс, реализованный в виде отдельной таблицы или набора таблиц. Синхронное обновление такого индекса требует распределённых транзакций.LOCAL
— локальный индекс в рамках шарда колоночной или строковой таблицы, не требует распределённых транзакций при обновлении, однако не обеспечивает прюнинг при поиске.
-
<index_name>
— уникальное имя индекса, по которому будет возможно обращение к данным. -
SYNC/ASYNC
— синхронная или асинхронная запись в индекс. По умолчанию синхронная. -
<index_type>
- тип индекса, в настоящее время поддерживаются:secondary
— вторичный индекс. Доступен толькоGLOBAL
. Является значением по умолчанию.vector_kmeans_tree
— векторный индекс. Подробнее описан в Векторный индекс.
-
UNIQUE
— создаёт индекс с гарантией уникальности для вставляемых значений. -
<index_columns>
— список имён колонок создаваемой таблицы через запятую, по которым возможен поиск в индексе. Обязательно должен быть указан. -
<cover_columns>
— список имён колонок создаваемой таблицы через запятую, которые будут сохранены в индексе дополнительно к колонкам поиска, давая возможность получить дополнительные данные без обращения за ними в таблицу. По умолчанию пуст. -
<parameter_name>
и<parameter_value>
— параметры индекса, специфичные для конкретного<index_type>
.
Примеры создания таблиц со вторичным индексом
CREATE TABLE my_table (
a Uint64,
b Uint64,
c Utf8,
d Date,
INDEX idx_d GLOBAL ON (d),
INDEX idx_ba GLOBAL ASYNC ON (b, a) COVER (c),
INDEX idx_bc GLOBAL UNIQUE SYNC ON (b, c),
PRIMARY KEY (a)
)
CREATE TABLE my_table (
a Uint64 NOT NULL,
b Uint64,
c Utf8,
d Date,
INDEX idx_d GLOBAL ON (d),
INDEX idx_ba GLOBAL ASYNC ON (b, a) COVER (c),
PRIMARY KEY (a)
)
WITH (
STORE = COLUMN
);