Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BBD_Shpory.doc
Скачиваний:
11
Добавлен:
26.09.2019
Размер:
13.1 Mб
Скачать

9. Задача поиска информации. Индексные файлы, их структура и принцип работы, хеширование.

Допустим, мы хотим найти запись по значению одного из полей. Простейший метод - чтение всех записей до того как найдем запись с искомым полем. Во многих случаях метод перебора не устраивает. При наличии очереди клиентов (касса аэропорта, оптовый склад) выполнение запроса по десяткам тысяч записей должно занимать единицы секунд.

Скорость поиска можно увеличить в сотни раз, если упорядочить файл (таблица) по возрастанию (или убыванию) значений ключа поиска. В этом случае используется специальный алгоритм поиска с быстрой сходимостью (например, деления пополам).

Теперь усложним задачу и зададим следующий вопрос: «Перечислить сотрудников отдела В с зарплатой менее 80000 рублей». В этом случае придется сначала упорядочить таблицу по коду отдела, но тогда нарушится упорядочение по табельному номеру и по нему - опять придем к медленному варианту поиска - перебору.

Такие проблемы решаются следующим образом. Таблицу «Кадры» трогать не нужно, а нужно создать два так называемых индексных файла (или индекса). В индексный файл записываются значения поля поиска (табельный номер, код отдела и т.д.), которые упорядочены по возрастанию. Каждое значение снабжено номером соответствующей записи таблицы «Кадры». При поиске система быстро находит в индексном файле значение ключа поиска вместе с номером и по номеру обращается к файлу «Кадры», и читает искомую запись.

Для каждой таблицы можно создать любое нужное количество индексных файлов. При этом она называется индексированной.

Каждый индексный файл характеризуется конкретным ключом индексирования (им может оказаться и главный ключ таблицы).

Таким образом, механизм индексирования является мощным инструментом, необходимым для многотысячных таблиц. Если мы будем применять его для небольших таблиц, то сама организация (создание файлов) займет столько времени, что сведет к нулю весь эффект.

На практике целесообразно физически упорядочить файл для какого-то одного ключа и при этом отказаться от построения одного из индексных файлов.

Существует ещё один способ сократить поиск – хэширование. Общая идея: завести массив фиксированной длины и придумать функцию, осуществляющую отображение значение ключа записи на множество индексов массива 0...n, где n - размер массива. Обычно размер массива много меньше количества записей, так что отображение получается неоднозначное. Если различные ключи приводят в один и тот же индекс массива, то возникает конфликт. Обычно этот конфликт разрешается таким образом: каждый элемент массива содержит не одну запись, а список записей. То есть для поиска записи по ключу:

а) находим индекс i по хэш-функции;

б) перебираем весь список элементов этого индекса для поиска элемента с требуемым ключом.

Одним из важнейших свойств является свойство Индексированное поле. Оно устанавливается для тех полей, для которых предусматривается частое использование поиска при ограниченном времени. Свойство индексирования значительно ускоряет поиск за счёт создания специального индексного файла (вспомогательной таблицы, отсортированной по полю поиска), но при этом увеличивается время загрузки приложения и время запросов на изменение (за счёт перестроения индексной таблицы), затрагивающих данную таблицу. Индекс для первичного ключа генерируется автоматически. Рекомендации по заданию индексов:

• Создавайте индексы только в тех случаях, когда число строк > 200.

• Используйте для индексирования только те столбцы, в которые входит небольшой процент строк с одним и тем же значением.

• Не индексируйте часто изменяемые столбцы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]