2013-12-01 3 views
2

Я всегда думал, что индексы B-дерева всегда обновляются (перебалансируются) после каждой вставки, обновления или удаления. Однако похоже, что Oracle не обновляет его после удаления (deleted leafs still remain in index tree). Как насчет вставки и обновления строк, где мы используем тип индекса B-дерева? Обновляется ли индекс во время каждой вставки/обновления?Когда и почему индексы оракула становятся недействительными?

Другой вопрос: почему и когда индексы становятся недействительными, поэтому их необходимо перестроить? Меня больше всего беспокоят индексы B-tree, но также было бы интересно узнать, когда нужно перестроить другие типы индексов.

+0

Исключения из индекса b-дерева не приводят к объединению блоков листьев, когда они имеют достаточное свободное пространство, но когда листовой блок полностью пуст, он возвращается в список «пустой блок» для повторного использования , Кроме того, пространство, введенное путем удаления из блока индексного листа, доступно для повторного использования другими подходящими строками, поэтому оно не является мертвым пространством, пока индекс не будет перестроен. –

ответ

2

В нормальном режиме работы индексы не становятся недействительными в Oracle.

И они редко когда-либо нуждаются в «перестройке». Ssee это Ask Tom статья для деталей. Jonathan Lewis' blog также содержит очень полезную информацию по этой теме:

Единственные возможные способы, по которым я могу думать о том, что индекс недействителен, - это когда он был отключен вручную (alter index foo disable) или когда данные были загружены через вставки прямого пути, например. при использовании SQL * Loader с опцией direct=true.

Редактировать:

Конечно, я забыл разделить. И Винфрид прав с его ответом.

+0

Это может произойти, если таблица также перестроена ... – Ben

+0

@Ben: что именно вы имеете в виду при «перестройке таблицы»? –

+1

'alter table move' – Ben

2

Индекс становится недействительным, если у вас есть разбитая таблица с глобальным индексом, и вы удаляете один раздел из этой таблицы. Однако при отбрасывании раздела вы можете указать неявное перестроение индекса.

+1

Я не тестировал, и я не уверен, но, возможно, индекс также недействителен при изменении типа данных столбца где индекс определен. Может быть, только для составных индексов, т. Е. Индекс, определенный только для нескольких столбцов. –

Смежные вопросы