2.4. TssDataStorageIndex

Для ускорения поиска данных в TssDataStorage служит класс TssDataStorageIndex. При создании объекта типа TssDataStorageIndex указывается TssDataStorage, для которого создается индекс, и список полей, по которым надо построить индекс. Далее перечислены методы класса TssDataStorageIndex.

МетодВозвращаетОписание
OrderTRecNoArrayВозвращает массив номеров записей, отсортированных в порядке полей индекса.
DistinctTRecNoArrayВозвращает массив номеров записей, только с различными значениями полей индекса.
LocateIntegerИщет запись с указанными значениями в полях индекса. Возвращает номер найденной записи, или -1, если запись не найдена.
SearchTRecNoArrayИщет все записи с указанными значениями в полях индекса. Возвращает массив найденных номеров записей.
NotExistsTRecNoArrayИщет все записи, значений в полях индекса у которых нет в указанном (в параметре метода) другом индексе.
JoinTJoinRecNoArrayВозвращает результат join объединения данного индекса и указанного (в параметре метода) другого индекса.
LeftJoinTJoinRecNoArrayВозвращает результат left join объединения данного индекса и указанного (в параметре метода) другого индекса.
FullJoinTJoinRecNoArrayВозвращает результат full join объединения данного индекса и указанного (в параметре метода) другого индекса.

Вызовы всех join-методов Index1.<join method>(Index2) возвращают массив из записей типа TJoinRecNo. В этих записях поле RecNo – это номер записи индекса Index1, а поле SourceRecNo - номер записи индекса Index2. Если запись не найдена, то в поле будет значение -1.

Доступ к индексам данного TssDataStorage можно получить через свойство DataStorageIndexes.

Например (если

KeyIndex: TssDataStorageIndex; DS: TssDataStorage):KeyIndex := DS. DataStorageIndexes.Index(‘fld1,fld2’);

При этом, если такой индекс уже существует в DataStorageIndexes, то будет использован он, иначе в DataStorageIndexes будет создан новый индекс. При разрушении TssDataStorage все его созданные индексы также будут разрушены, то есть явно разрушать их не надо.

Особенности:

  1. Метод Locate у TssDataStorage внутри использует индекс, поэтому нет необходимости явно использовать индекс для поиска значений в TssDataStorage.

  2. При любом изменении данных в TssDataStorage его список индексов очищается. Поэтому нежелательно перемежать использование индекса и редактирование TssDataStorage. Это приведет к постоянному пересозданию индекса.