Создание и удаление вторичных индексов

Команда table index позволяет создавать и удалять вторичные индексы:

ydb [connection options] table index [subcommand] [options]

, где [connection options] - опции соединения с БД

Также добавить или удалить вторичный индекс можно с помощью директив ADD INDEX и DROP INDEX операции YQL ALTER TABLE.

О назначении и применении вторичных индексов при разработке приложений можно прочитать в статье Вторичные индексы в разделе "Рекомендации".

Создание вторичного индекса

Создание вторичного индекса выполняется командой table index add:

ydb [connection options] table index add <sync-async> <table> \
  --index-name STR --columns STR [--cover STR]

Параметры:

<sync-async> : Тип вторичного индекса. Укажите global-sync для построения индекса с синхронным обновлением или global-async для индекса с асинхронным обновлением.

<table>: Путь и имя таблицы, для которой выполняется построение индекса

--index-name STR: Обязательный параметр, в котором задается имя индекса. Рекомендуется определять такие имена индексов, чтобы по ним можно было понять, какие колонки в них включены. Имена индексов уникальны в контексте таблицы.

--columns STR: Обязательный параметр, в котором определяются состав и порядок включения колонок в ключ индекса. Перечисляются имена колонок через запятую, без пробелов. Ключ индекса будет состоять из этих колонок с добавлением колонок первичного ключа таблицы.

--cover STR: Необязательный параметр, в котором определяется состав покрывающих колонок индекса. Их значения не будут включены в состав ключа индекса, но будут скопированы в записи в индексе для получения их значений при поиске по индексу без необходимости обращения к таблице.

В результате успешного исполнения команды запускается фоновая операция построения индекса, и в выделенном псевдографикой поле id возвращается идентификатор операции для дальнейшего получения информации о её статусе командой operation get. Незаконченное построение индекса может быть прервано командой operation cancel.

После того, как построение индекса завершено (успешно или прервано), запись об операции построения может быть удалена командой operation forget.

Получить информацию о статусе всех операций построения индекса можно командой operation list buildindex.

Примеры

В примерах используется профиль db1, о создании которого рассказано в статье Знакомство с YDB CLI раздела "Начало работы".

Добавление синхронного индекса по колонке air_date в таблицу episodes из статьи про YQL в разделе "Начало работы":

ydb -p db1 table index add global-sync episodes \
  --index-name idx_aired --columns air_date

Добавление асинхронного индекса по колонкам release_date и title, и с копированием в индекс значения колонки series_info, для таблицы series из статьи про YQL в разделе "Начало работы":

ydb -p db1 table index add global-async series \
  --index-name idx_rel_title --columns release_date,title --cover series_info

Вывод (id операции при фактическом запуске будет другой):

┌──────────────────────────────────┬───────┬────────┐
| id                               | ready | status |
├──────────────────────────────────┼───────┼────────┤
| ydb://buildindex/7?id=2814749869 | false |        |
└──────────────────────────────────┴───────┴────────┘

Получение информации о статусе операции (подставьте фактический id операции):

ydb -p db1 operation get ydb://buildindex/7?id=281474976866869

Возвращаемое значение:

┌──────────────────────────────────┬───────┬─────────┬───────┬──────────┬─────────────────┬───────────┐
| id                               | ready | status  | state | progress | table           | index     |
├──────────────────────────────────┼───────┼─────────┼───────┼──────────┼─────────────────┼───────────┤
| ydb://buildindex/7?id=2814749869 | true  | SUCCESS | Done  | 100.00%  | /local/episodes | idx_aired |
└──────────────────────────────────┴───────┴─────────┴───────┴──────────┴─────────────────┴───────────┘

Удаление информации о построении индекса (подставьте фактический id операции):

ydb -p db1 operation forget ydb://buildindex/7?id=2814749869

Удаление вторичного индекса

Удаление вторичного индекса выполняется командой table index drop:

ydb [connection options] table index drop <table> --index-name STR

Пример

В примерах используется профиль db1, о создании которого рассказано в статье Знакомство с YDB CLI раздела "Начало работы".

Удаление индекса idx_aired с таблицы episodes, построенного в примере создания индекса выше:

ydb -p db1 table index drop episodes --index-name idx_aired