Давайте посмотрим на интересные свойства индекса в базе 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
Вы заметили, что здесь совершенно противоположная картина? Хотя изначально можно удивляться, почему во втором примере для индекса потребовалось больше листовых блоков, хотя информация в таблице такая же, как и в первом варианте только в обратном порядке.
Делайте выводы, как говорится...