Программирование >>  Oracle 

1 ... 101 102 103 [ 104 ] 105 106 107 ... 469


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

Мы рассмотрели два вида кластеров в Oracle - индексные и хеш-кластеры. Создание кластера преследует две цели:

хранить данные нескольких таблиц вместе, в одних и тех же блоках данных;

хранить похожие данные в одном месте, на основе ключа кластера, так что, на-

пример, все данные для отдела 10 (из нескольких таблиц) хранятся вместе.

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

Затем мы перешли к вложенным таблицам. Рассмотрели синтаксис, семантику и использование таких таблиц. Убедились, что фактически они являются сгенерированной и поддерживаемой системой парой таблиц главная/подчиненная, и разобрались, как сервер Oracle создает эти таблицы. Мы рассмотрели различные типы вложенных таблиц, которые по умолчанию организуются в виде кучи. Б1ло показано, что имеет см1сл создавать вложенные таблицы как организованные по индексу.

Затем мы рассмотрели особенности временных таблиц: как их создавать, где им выделяется пространство, а также то, что при работе с ними не возникает проблем одновременного доступа. Мы изучили различия между временными таблицами, создаваемыми на время выполнения транзакции и на время сеанса. Был представлен правильный способ использования временных таблиц в базах данных Oracle.

В завершение главы описана работа с объектными таблицами. Как и в случае вложенных таблиц, мы обнаружили, что при использовании объектных таблиц в Oracle многое происходит за кадром . Было показано, как объектные представления на базе обычных реляционных таблиц позволяют получить функциональные возможности объектн1х таблиц и в то же время обеспечивают простой доступ к базовым реляционным данным. Эта тема более подробно будет рассмотрена в главе 20, посвященной объектно-реляционным возможностям.




Индексы

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

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

В этой главе будет сделан обзор индексов, предлагаемых в СУБД Oracle, и показано, когда и где их можно использовать. Эта глава отличается от других глав книги по стилю и формату. Индексирование - обширная тема; об этом можно написать целую книгу. Индексирование касается как разработчиков приложений, так и администраторов баз данн1х. Разработчик должен знать об индексах, как применять их в создаваемых приложениях, когда их использовать (а когда - нет) и т.д. Администратор базы данных



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

Различные примеры в этой книге требуют разных базов1х версий СУБД Oracle. Если определенная возможность доступна только в Oracle 8i Enterprise или Personal Edition, я это укажу. Многие примеры с индексами на основе В*-дерева требуют использования Oracle 7.0 или более поздних версий. Примеры с битовыми индексами требуют наличия Oracle 7.3.3 или более поздних версий (в редакции Enterprise или Personal). Индексы по функциям и прикладные индексы требуют использования Oracle 8i Enterprise или Personal Edition. Раздел Часто задаваемые вопросы применим ко всем версиям СУБД Oracle.

Обзор индексов в Oracle

СУБД Oracle предлагает много различных типов индексов.

Индексы на основе В*-дерева. Эти индексы называют обычными . Они, несомненно, чаще всего используются в СУБД Oracle, да и в других СУБД. Аналогичные по конструкции двоичному дереву, они обеспечивают быстрый доступ по ключу к отдельной строке или диапазону строк, требуя обычно очень немного чтений для поиска соответствующей строки. Индекс на основе В*-дерева имеет несколько подтипов:

Таблицы!, организованн1е по индексу. Это таблицы, хранящиеся в структуре В*-дерева. Они достаточно подробно описывались в главе 6, посвященной таблицам. В соответствующем разделе главы 6 рассматривались физические структуры, в которых хранятся В*-деревья, так что к этой теме мы возвращаться не будем.

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

Индексы с обращенн1м ключом. Это индексы на основе В*-дерева, байты клюта в которых инвертированы. Это используется для более равномерного распределения записей по индексу при вводе возрастающих значений ключей. Предположим, при использовании последовательности для генерации первичного ключа генерируются значения 987500, 987501, 987502 и т.д. Поскольку это последовательные значения, они будут попадать в один и тот же блок индекса, конкурируя за него. В индексе с обращенным ключом сервер Oracle будет индексировать значения 205789, 105789, 005789. Эти значения обычно будут далеко отстоять друг от друга в индексе, и вставки в индекс будут распределены по нескольким блокам.



1 ... 101 102 103 [ 104 ] 105 106 107 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика