Перейти к основному содержимому
Версия: 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;