Перейти к основному содержимому
Версия: 7.0

Индексы

Индекс хранит в базе значения одного или нескольких полей таблицы в упорядоченном виде. Соответственно, индекс обновляется при каждом изменении этих значений. Благодаря индексу, если, например, идет фильтрация по индексированному свойству, можно очень быстро найти нужные объекты, а не просматривать все существующие объекты в системе.

Индексировать можно только материализованные свойства.

Индекс также может быть построен сразу по нескольким полям одной таблицы (это эффективно, если, к примеру, фильтрация идет сразу по этим нескольким полям). В такой составной индекс можно включать как материализованные свойства, так и параметры, указывающие на ключевые поля таблицы. Такой индекс должен содержать хотя бы одно материализованное свойство; все свойства в нем должны храниться в одной таблице и использовать один и тот же набор параметров.

Помимо обычного индекса, платформа поддерживает специальные типы индексов LIKE и MATCH, предназначенные для одноименных операторов. Для строковых полей LIKE добавляет специализированный индекс для операций LIKE, а MATCH - специализированные индексы для MATCH и LIKE, если для текущего адаптера БД доступна соответствующая trigram/full-text поддержка. Строковый MATCH индекс использует текущий язык полнотекстового поиска. Для одного поля типа TSVECTOR индекс MATCH создает только специализированный GIN индекс по самому полю.

Язык

Для создания индексов необходимо использовать инструкцию INDEX для индекса по произвольному списку полей одной таблицы или опцию INDEXED для индекса по одному материализованному свойству.

Примеры

orderDate = DATA DATE (Order) INDEXED;

INDEX customer(Order o);
number = DATA STRING (Order);
INDEX 'order_number_match' MATCH number(Order o);

date = DATA DATE (Order);
INDEX date(Order o), o;

INDEX supplier(Sku s, DATE d), s, price(s, d), d;