Работа с индексами
Для организации упорядочивания содержимого файла БД и поиска в ней по значению одного или нескольких полей применяется механизм индексов. Его применение можно сравнить с сортировкой картотеки по определенному признаку (совокупности признаков). Однако, в отличие от картотеки, файл БД может иметь сразу несколько индексов, и, соответственно, являться упорядоченным одновременно по нескольким признакам. Индексы хранятся в индексном файле. Индексный файл может содержать информацию более чем об одном индексе. Рекомендуется для одного файла DBF иметь один индексный файл, в котором хранятся все индексы для этого файла.
Каждый индекс имеет наименование, признак уникальности, выражение индекса и фильтр. Наименование индекса используется для идентификации индекса. Выражение индекса и фильтр представляют собой написанные на специальном языке выражения, вычисление значения которых для каждой записи позволяет определить ее место при упорядочивании и необходимость помещения ее в упорядоченный список (индекс может содержать упоминание не обо всех записях таблицы, а только об удовлетворяющих выражению фильтра). Уникальный индекс (имеющий установленным признак уникальности) позволяет иметь в индексе ссылки на записи только с различным значением индексного выражения.
Основное правило: индекс нужен, чтобы быстро искать нужную запись.
DBF-ФАЙЛ |
Индекс по фамилии |
Физ. номер записи | |||||||||||||||
Фамилия | |||||||||||||||
1 | |||||||||||||||
Иванов | |||||||||||||||
2 | |||||||||||||||
Абдулов | |||||||||||||||
3 | |||||||||||||||
Барабанов | |||||||||||||||
4 | |||||||||||||||
Мирнов | |||||||||||||||
5 | |||||||||||||||
Раскольников | |||||||||||||||
6 | |||||||||||||||
Комаров | Нужно быстро найти Комаров. В неупорядоченном исходном файле искать его можно только последовательным перебором всех записей, что будет очень долго при большом числе записей. В индексе найти Комарова можно очень быстро, поскольку индекс отсортирован по полю Фамилия. При этом мы узнаем физический номер записи в файле DBF и производим прямое позиционирование на нужную запись. После создания структуры базы данных можно добавить индексы следующим образом: //Синтаксис: ДобавитьИндекс(<Название>, <Выражение>, <Уникальность>, <Убывание>, <Фильтр>) Файл = СоздатьОбъект("XBase"); Файл.ДобавитьПоле("NAME", 1, 19, 3); Файл.ДобавитьПоле("PRICE", 2, 25, 0); Файл.ДобавитьИндекс("IDXCODE", "CODE", 1, 0, ""); Файл.ДобавитьИндекс("IDXNAME", "NAME", 0, 0, ""); Файл.ДобавитьИндекс("IDXNAMECODE", "NAME+CODE", 0, 0, ""); Файл.СоздатьФайл("mydb.dbf", "mydb.cdx"); //1-й вариант Файл.ТекущийИндекс("IDXNAME"); Файл.Найти("Иванов",0); //передается значение и режим поиска //2-й вариант Файл.ТекущийИндекс("IDXNAMECODE"); Файл.Ключ.NAME = "Иванов"; Файл.Ключ.CODE = 123; Файл.НайтиПоКлючу(0); //после сбоя рекомендуется заново переформировать все индексы Файл.Переиндексировать(); В 1С существует специальный язык для задания выражений и фильтра индекса. Подробнее о нем, смотрите в документации на встроенный язык.
| ||||||||||||||