Хешированные индексы
⇐ ПредыдущаяСтр 44 из 44 Хешированные индексы реализованы в Oracle в виде хешированных кластеров. Хешированный кластер — специализированный вид организации данных, обеспечивающий быстрый доступ к строкам таблицы. При обращении к хешированному кластеру по значению кластерного ключа применяется функция хеширования (hashing), результатом которой является значение хешированного ключа и адрес блока данных. Хешированный кластер группирует в одном блоке строки, содержащие одинаковые значения этой функции от ключей. На любой таблице можно построить только один хешированный индекс. Доступ к таблице посредством В-дерева требует выполнения, по меньшей мере, двух операций ввода/вывода, а обычно больше (если таблица, а потому и дерево ее индекса, большая). Доступ к хешированному кластеру потребует один вызов функции хеширования и одну операцию ввода/вывода для кластера. Хешированные кластеры целесообразно использовать для больших таблиц, поиск по которым, как правило, осуществляется с условиями равенства по ключевому столбцу (столбцам). При этом значения ключей не модифицируются. Поэтому заранее можно точно определять число значений хешированных ключей и размер кластера. В дополнение к этому, ключевой столбец (столбцы) должен быть высокоселективен. Главным преимуществом хешированного индекса по сравнению с В-деревом является лучшая производительность выборки, вставки, обновления и удаления записей, если используются условия равенства для всех ключевых столбцов кластера. Битовые индексы Битовые индексы обеспечивают быстрое обращение к данным больших таблиц, когда доступ организуется по столбцам с низкой или средней селективностью с использованием различных сочетаний условий равенства. Битовый индекс построен в виде двоичной карты (bitmap) по значениям ключа. Это означает, что для каждой строки таблицы в двоичной карте, то есть в определенном бите некоторой последовательности байтов, поставлена 1 или 0 (“да” или “нет”) в соответствии со значением ключа конкретной строки. Во время обработки запросов оптимизатор Oracle может динамически преобразовывать элементы индексов битовой карты в идентификаторы строк.
Пример организации битового индекса по низкоселективному столбцу «пол» показан в таблицах. Таблица Bitmap индекс по столбцу «пол»
Битовые карты нецелесообразно применять для часто обновляемых столбцов, поскольку даже простое изменение одной строки обычно приводит к копированию всей соответствующей секции битовой карты. В приведенном примере столбец «пол» вообще не обновляется, так что если данные из таблицы удаляются редко, можно использовать данный индекс без снижения производительности. Еще необходимо учесть, что Oracle сжимает хранимые битовые карты. В результате для индекса битовой карты может потребоваться дисковое пространство, составляющее 5-10% пространства, необходимого для обычного индекса. Таким образом, можно применять индексы на основе битовых карт по отношению к любому низкоселективному столбцу, часто используемому в конструкции WHERE, при условии, что набор значений этого столбца ограничен. Битовые индексы можно использовать для поиска только по условиям равенства (“=”, IN). Если необходим доступ по интервалу индексированных значений, то предпочтительнее использовать В-деревья. Индекс-таблицы Индекс-таблица — это таблица, которая физически построена в виде двоичного дерева относительно своего первичного ключа. Начиная с Oracle8, существует возможность определить таблицу, которая одновременно является и собственным индексом, что устраняет ведение двух отдельных структур. Как правило, это таблицы с короткими строками, обращение к которым всегда производится или по первичному ключу, или полным сканированием. Данные в таких таблицах отсортированы по значениям столбца первичного ключа и сохраняются так, как если бы вся таблица целиком содержалась в одном индексе.
Чтобы минимизировать объем работы, необходимой для активного управления индексами следует использовать индекс-таблицу лишь в тех случаях, когда данные очень статичны. Не рекомендуется использовать индекс-таблицы, если строки имеют относительно большую длину, например, свыше 20% от размера блока. В этом случае лучшим выбором является использование обычных таблиц и индексов. Для создания индекс-таблиц в команде CREATE TABLE указываются ключевые слова ORGANIZATION INDEX. Пример создания индексно-организованной таблицы: CREATE TABLE TabIndex (At1 NUMBER(4) PRIMARY KEY, At2 VARCHAR(40) ) ORGANIZATION INDEX; Существуют некоторые ограничения при работе с индекс-таблицами. Наиболее важно, что их строки не имеют идентификаторов (ROWID), поэтому не могут быть созданы никакие дополнительные индексы, за исключением обязательного первичного ключа. Следует отметить, что индекс-таблицы активно используются и в других СУБД, например, Microsoft SQL Server по умолчанию создает именно такие таблицы. Заключение К сожалению, ограниченный объем учебного пособия не позволил автору включить в него все аспекты технологий баз данных, которые могут потребоваться специалисту в будущей деятельности. Однако, тех фундаментальных базовых знаний, которые можно получить при изучении всех пяти глав пособия, вполне достаточно для дальнейшего самообразования в данной области с помошью многочисленных информационных ресурсов, которые прекрасно дополнят полученные знания в области систем баз данных. Принимая во внимание высокую динамику развития технологий баз данных, можно считать данное пособие всего лишь стартовым учебным материалом, на основе которого будут формироваться новые знания на протяжении всей профессиональной карьеры выпускника технического вуза, работающего в сфере информационных технологий.
Читайте также: Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|