Индексы, листовые блоки, перестройка (rebuild) индекса

Давайте посмотрим на интересные свойства индекса в базе Oracle. Когда вы решите, что нужно перестраивать индекс, выполните следующие манипуляции. И вы убедитесь, насколько должно быть продуманным решение сделать rebuild.

create table my_table(a number);
create index my_table_idx on my_table(a);
insert into my_table select rownum from dual connect by level <= 1000000;
analyze index my_table_idx compute statistics;
select blevel, leaf_blocks from user_indexes where index_name='MY_TABLE_IDX';
BLEVEL   LEAF_BLOCKS
2  	       1999
alter index my_table_idx rebuild;
analyze index my_table_idx compute statistics;
select blevel, leaf_blocks from user_indexes where index_name='MY_TABLE_IDX';
BLEVEL   LEAF_BLOCKS
2	     2226

Надеюсь вы увидели, что листовых блоков стало намного больше. Насколько это приемлемо в вашей ситуации?

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

drop table my_table;
create table my_table(a number);
create index my_table_idx on my_table(a);
insert into my_table select 1000000-rownum from dual connect by level <= 1000000;
analyze index my_table_idx compute statistics;
select blevel, leaf_blocks from user_indexes where index_name='MY_TABLE_IDX';
BLEVEL   LEAF_BLOCKS
2	     4059
alter index my_table_idx rebuild;
analyze index my_table_idx compute statistics;
select blevel, leaf_blocks from user_indexes where index_name='MY_TABLE_IDX';
BLEVEL   LEAF_BLOCKS
2	    2226

Вы заметили, что здесь совершенно противоположная картина? Хотя изначально можно удивляться, почему во втором примере для индекса потребовалось больше листовых блоков, хотя информация в таблице такая же, как и в первом варианте только в обратном порядке.

Делайте выводы, как говорится...

Вас заинтересует / Intresting for you:

Индексы Oracle
Индексы Oracle 15292 просмотров Игорь Воронов Tue, 21 Nov 2017, 13:18:46
Как устроен поиск блоков данны...
Как устроен поиск блоков данны... 3202 просмотров Дэн Wed, 03 Jan 2018, 17:39:13
История развития СУБД Oracle
История развития СУБД Oracle 3193 просмотров Stas Belkov Tue, 21 Nov 2017, 13:19:55
Транзакции и механизм отмены U...
Транзакции и механизм отмены U... 3572 просмотров Игорь Воронов Tue, 21 Nov 2017, 13:17:28
Войдите чтобы комментировать

AlexV аватар
AlexV ответил в теме #7924 18 янв 2017 17:33
Использовать индексы в базе Oracle (и в любой другой) нужно с умом и очень осторожно, иначе вреда может быть больше, чем пользы. Разработчики приложений порой такого напортачат с индексами. Одно лечат, а другое калечат...