M Y D E L P H I 7 . R U Самоучитель программирования  
 
  • Главная
  •  

     

    Использование индексов

    Обычно использование индексов — прерогатива сервера БД. Из компонентов Delphi только табличные компоненты могут в какой-то степени управлять использованием индексов. Очевидно, что удаленное соединение не способствует эффективному управлению индексами набора данных на сервере. Поэтому компонент TclientDataSet предоставляет разработчику возможность создавать и использовать локальные индексы.

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

    Для создания локального индекса используется метод

    procedure Addlndex(const Name, Fields: string; 

    Options: TindexOptions;

    const DescFields: string = ''; 

    const CaselnsFields: string = '';

    const GroupingLevel: Integer = 0);

    Параметр Name определяет имя нового индекса. Параметр Fields должен содержать имена полей, которые разработчик хочет включить в индекс. Имена полей должны разделяться точкой с запятой. Параметр options позволяет задать тип индекса:

    TindexOption = (ixPrimary, ixUnique, ixDescending, ixCaselnsensitive, ixExpression, ixNonMaintained);

    TindexOptions = set of TindexOption;

    ixPrimary первичный индекс;

    ixUnique — значения индекса уникальны; 

    ixDescending — индекс сортирует записи в обратном порядке;

     ixCaselnsensitive — индекс сортирует записи без учета регистра символов;

     ixExpression — в индексе используется выражение (для индексов dBASE);

     ixNonMaintained — индекс не обновляется при открытии таблицы.

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

    Параметры DescFields и CaselnsFields используются вместо параметра Options.

    Параметр GroupingLevel задает уровень группировки полей индекса. Подробнее об этом см. ниже в разд. "Агрегаты" этой главы.

    Основные свойства компонента, обеспечивающие управление индексами, совпадают с аналогичными свойствами табличных компонентов (подробнее об этом см. гл. 12). Поэтому лишь кратко перечислим их.

    При работе с компонентом разработчик имеет возможность управлять индексами.

    Созданный индекс подключается к набору данных свойством

    property indexName: String;

    которое должно включать имя индекса или использовать свойство

    property indexFieldNames: String;

    в котором можно задать произвольное сочетание имен индексированных полей таблицы. Имена полей разделяются точкой с запятой. Свойства indexName и indexFieldNames нельзя использовать одновременно.

    Число полей, используемых в текущем индексе табличного компонента, возвращает свойство

    property indexFieldCount: Integer;

     свойство

    property indexFields: [index: Integer]: TField;

    представляет собой индексированный список полей, входящих в текущий индекс.

    Параметры созданных индексов доступны в свойстве

    property indexDefs: TindexDefs;

    Класс TindexDefs подробно рассматривается в гл. 12.

    После создания и подключения индекса записи набора данных "переупорядочиваются" в соответствии со значениями индексированных долей.

    Удаление локального индекса обеспечивает метод

    procedure Deletelndex(const Name: string);

    После удаления текущего индекса или его отмены (обнуления свойства indexName) записи набора данных "переупорядочиваются" в исходном порядке, соответствующем порядку записей набора данных на сервере.

    Имена всех существующих в наборе данных индексов можно загрузить в список при помощи метода

    procedure GetlndexNames(List: TStrings);

    Например:

    Memol.Lines.Clear;

    ClientDataSet.GetlndexNames(Memol.Lines);