Для ускорения поиска данных в TssDataStorage
служит класс TssDataStorageIndex
. При создании объекта типа TssDataStorageIndex
указывается TssDataStorage
, для которого создается индекс, и список полей, по которым надо построить индекс. Далее перечислены методы класса TssDataStorageIndex
.
Метод | Возвращает | Описание |
---|---|---|
Order | TRecNoArray | Возвращает массив номеров записей, отсортированных в порядке полей индекса. |
Distinct | TRecNoArray | Возвращает массив номеров записей, только с различными значениями полей индекса. |
Locate | Integer | Ищет запись с указанными значениями в полях индекса. Возвращает номер найденной записи, или -1, если запись не найдена. |
Search | TRecNoArray | Ищет все записи с указанными значениями в полях индекса. Возвращает массив найденных номеров записей. |
NotExists | TRecNoArray | Ищет все записи, значений в полях индекса у которых нет в указанном (в параметре метода) другом индексе. |
Join | TJoinRecNoArray | Возвращает результат join объединения данного индекса и указанного (в параметре метода) другого индекса. |
LeftJoin | TJoinRecNoArray | Возвращает результат left join объединения данного индекса и указанного (в параметре метода) другого индекса. |
FullJoin | TJoinRecNoArray | Возвращает результат 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
все его созданные индексы также будут разрушены, то есть явно разрушать их не надо.
Особенности:
Метод Locate
у TssDataStorage
внутри использует индекс, поэтому нет необходимости явно использовать индекс для поиска значений в TssDataStorage
.
При любом изменении данных в TssDataStorage
его список индексов очищается. Поэтому нежелательно перемежать использование индекса и редактирование TssDataStorage
. Это приведет к постоянному пересозданию индекса.