Индексы ROWID в Oracle
Индексы ROWID
Индексы ROWID — это объекты базы данных, обеспечивающие отображение всех значений столбца таблицы, а также идентификаторов ROWID всех строк таблицы, в которых содержатся значения столбца.
ROWID — это псевдостолбец, который является уникальным идентификатором строки в таблице и фактически описывает точное физическое расположение данной конкретной строки. На основе этой информации Oracle впоследствии может найти данные, связанные со строкой таблицы. При каждом перемещении, экспорте, импорте строки, а также при выполнении любых других операций, которые приводят к изменению ее местонахождения, изменяется ROWID строки, поскольку она занимает другое физическое положение. Для хранения данных ROWID требуется 80 бит (10 байт). Идентификаторы ROWID состоят из четырех компонентов: номера объекта (32 бита), относительного номера файла (10 бит), номера блока (22 бита) и номера строки (16 бит). Эти идентификаторы отображаются как 18-символьные последовательности, указывающие местонахождение данных в БД, причем каждый символ представлен в формате base-64, состоящем из символов A-Z, a-z, 0-9, + и /. Первые шесть символов – это номер объекта данных, следующие три – относительный номер файла, следующие шесть – номер блока, последние три – номер строки.
Пример:
SELECT fam, ROWID FROM student;
FAM ROWID
——————————————
ИВАНОВ AAAA3kAAGAAAAGsAAA
ПЕТРОВ AAAA3kAAGAAAAGsAAB
В базе данных Oracle индексы используются для разных целей: для обеспечения уникальности значений в базе данных, для повышения производительности поиска записей в таблице и др. Производительность повышается благодаря тому, что в критерии поиска данных в таблице включается ссылка на индексированный столбец или столбцы. В Oracle индексы можно создавать по любому столбцу таблицы, кроме столбцов типа LONG. Индексы проводят различие между приложениями, для которых скорость не важна, и интенсивно функционирующими приложениями, что особенно касается работы с большими таблицами. Однако, прежде чем принять решение о создании индекса, необходимо взвесить все «за» и «против» в отношении производительности системы. Производительность не повысится, если просто ввести индекс и забыть о нем.
Рекомендации по созданию индексов ROWID:
Хотя наибольшее повышение производительности достигается созданием индекса по столбцу, все значения которого уникальны, похожий результат можно получить и для столбцов, содержащих одинаковые значения или NULL-значения. Для создания индекса совсем не обязательно, чтобы значения столбца были уникальны. Приведем ряд рекомендаций, обеспечивающих нужное повышение производительности при использовании стандартного индекса, а также рассмотрим вопросы, связанные с балансом между производительностью и расходованием дискового пространства при создании индекса.
Использование индексов для поиска информации в таблицах может дать значительное повышение производительности по сравнению с просмотром таблиц, столбцы которых неиндексированы. Однако выбрать правильный индекс совсем непросто. Конечно, для индексирования с помощью индекса В-дерева предпочтителен столбец, все значения которого уникальны, но и столбец, не отвечающий этим требованиям,— неплохой кандидат, если только одинаковые значения содержатся примерно в 10% его строк и никак не более. Столбцы-«переключатели», или «флаги», например те в которых хранятся сведения о поле человека, для индексов В-дерева не годятся Не подходят и те столбцы, которые используются для хранения небольшого числа «достоверных значений», а также хранящие какие-то признаки, например «достоверность» или «недостоверность», «активность» или «неактивность», «да» или «нет» и т. д, и т. п. Наконец, индексы с обратными ключами применяются, как правило, там, где установлен и функционирует Oracle Parallel Server и нужно до максимума повысить уровень параллельности в базе данных.