Индекс слишком большой? Сколько блоков должен занимать индекс на таблицу?

dbstalker, 07 июня

Попробуем ответить на эти вопросы, используя следующий сценарий:

drop table t1;

create table t1 nologging         pctfree 10 as
select      owner,       object_type,       object_name,       object_id,       last_ddl_time
from       all_objects where       rownum <= 10000;

create index t1_i1 on t1(owner, object_type, object_name);

begin
      dbms_stats.gather_table_stats( user,   't1', cascade => true, estimate_percent => null,
            method_opt => 'for all columns size 1' );
end;


Select     round(100/70 *                -- предполагаем, что индекс упакован на 70%
                          1.01 *                  -- учитываем блоки для ветвей
 ( ind.num_rows * (6 + uniq_ind + 4) + -- размер фиксированной части записи
 sum((avg_col_len + desc_ind) * (tab.num_rows - num_nulls))  --  байты, занимаемые колонками 
    ) / (8192 - 100)                    -- размер блока- заголовок блока  - block overhead
      )                       index_block_estimate_70
from  (select /*+ no_merge */ num_rows,decode(uniqueness,'UNIQUE',0,1)uniq_ind from  user_indexes     where index_name = 'T1_I1') ind,--количество индексных записей 
      (select /*+ no_merge */ num_rows from  user_tables  where table_name = 'T1' )   tab,-- количество записей в таблице
      (select /*+ no_merge */ column_name,decode(descend,'ASC',0,1) desc_ind from  user_ind_columns where index_name = 'T1_I1') ic, -- перечень столбцов индекса
      (select /*+ no_merge */ column_name,avg_col_len,num_nulls from  user_tab_columns where table_name = 'T1') tc -- перечень столбцов таблицы
where tc.column_name = ic.column_name
group by ind.num_rows, ind.uniq_ind

А теперь сравним с реальным состоянием дел:

analyze index T1_I1 validate structure;

SELECT lf_blks, –- листовых блоков 
br_blks –- блоков ветвей
FROM index_stats;

Все вопросы к Jonathan Lewis.

Тэги: индексы

ОднаКнопка

 

Новый комментарий

Я не спамер: введите суму 4+4



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

Расписание автобусов
18 июля, 3 ответа
Отдых в августе
17 июля, 4 ответа