Пример использования NULL - свойства индекса

dbstalker, 21 июля

Oracle в индексах на основе B* - дерева не содержит неопределенных ключей. То есть если в таблице есть запись у которой по всем ключам индекса стоит NULL, то индекс соответствующей записи не имеет.

Хорошо это или плохо?

Приведу пример того, что это хорошо.

Создаем таблицу. Одна колонка в таблице имеет значение NULL или любое другое. По этой колонке построим индекс. Очевидно, что если в таблице будет много записей с пустым значение ключа нашего индекса, то индекс будет небольшим. А значит, получить записи с непустым значением ключа будет легко и просто. Смотрим сюда:

create table my_table (a number, b varchar2 (50));
create index my_table_index on my_table (a);
insert into my_table select OBJECT_ID,object_name from dba_objects ;
insert into my_table select null,object_name from dba_objects;
commit;
analyze index my_table_index  compute statistics;
  
    SQL Statement from editor:
   
   
  select /*+index(my_table) */ * from my_table where a is not  null
  ------------------------------------------------------------
    
  Statement Id=0   Type=SELECT STATEMENT
  Cost=290  TimeStamp=21-07-10::11::24:36
  
       (1)  SELECT STATEMENT  ALL_ROWS 
     Est. Rows: 57 775  Cost: 290
       (3)  TABLE TABLE ACCESS BY INDEX ROWID ANALIZ.MY_TABLE  [Not Analyzed] 
       (3)   Est. Rows: 57 775  Cost: 290 
     Tablespace: ANALIZ
           (2)  INDEX INDEX FULL SCAN ANALIZ.MY_TABLE_INDEX  [Analyzed] 
                Est. Rows: 5 860  Cost: 237

Такое свойство индекса можно использовать следующим образом: есть таблица с «обработанными» записями и еще «необработанными». «Необработанные» записи в ключе индекса имеют непустое значение. После «обработки» ключ делаем пустым. Таким образом, когда выбираются записи для «обработки» используется индекс, состоящий только из записей с непустым ключом.

Возможно, вы еще как-то применяете такое свойство индекса?

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

ОднаКнопка

 

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

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



 

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

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

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

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


 
 

Бизнес форум

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

Товары для взрослых
24 мая, 1 ответа
Выделенный сервер
23 мая, 3 ответа