Индексы

Оценить
(0 голоса)

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

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

К альтернативным методам индексации относятся следующие:

•             Индексы В-дсрева. Этот метод индексации является, вероятно, наиболее широко используемым. Информация столбцов с ключами сохраняется в древовидной структуре после сортировки по их значениям. Индекс В-дерева поддерживает быстрый доступ в выборках по точным значениям (например, клиент с идентификатором 123456) или диапазонам значений (например, все клиенты, имеющие zip-код (почтовый индекс) от 94000 до 94050). Такой индекс динамичен и может возрастать при увеличении таблицы. Для нахождения значения ключа и положения связанной с ним строки данных потребуется несколько обращений к диску. Чем больше В-дерево, тем больше ветвей дерева (страниц, не являющихся листьями) будет пройдено для достижения искомого результата (страниц, являющихся листьями дерева).

•             Хэш-индексы. Местоположение страницы данных, содержащей индекс, определяется посредством применения к значениям столбцов с ключами алгоритма хэширования (размещение элемента данных в хэш-таблице с использованием функции расстановки). Хэш-индекс поддерживает быстрый доступ в выборках по точным ключам; хэш-структуры не пригодны для поисков по диапазонам. Хэш-индексы могут быть или сохранены в отдельных объектах базы данных, или индекс может быть вовсе Исключен, и вся строка сохраняется непосредственно в хэш-странице. Преимущество хэш-индексов заключается в том, что значение ключа часто может быть достигнуто буквально при одном обращении к диску.

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

•             Индексы по битовому отображению. Битовые массивы создаются для каждого уникального значения в столбце, и для каждой строки размещается один бит, включенный для индикации наличия в строке данного значения. При увеличении числа уникальных значений в таблице битовые массивы становятся более "неуклюжими", поскольку для их хранения необходимо больше пространства, и набор битов в любом конкретном битовом массиве становится более "рассеянным". В некоторой степени здесь может помочь компрессия (сжатие) битов, однако в этом случае страдает производительность. Превосходным кандидатом для индексации по битовому отображению служит столбец пола личности, содержащая одно из значений М (мужской) и F (женский) для каждой строки.

Индексы по битовому отображению предусматривают очень эффективную обработку предикатов предложениями OR и AND, используя двоичную алгебру.

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

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

Страницы базы данных
Нормализация
Механизм базы данных
Оптимизатор запросов
Базы данных

Добавить комментарий


Защитный код
Обновить