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

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

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

 

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

 

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

Индексы Oracle
Индексы Oracle 27555 просмотров Игорь Воронов Tue, 21 Nov 2017, 13:18:46
Использование SQL-кода для ген...
Использование SQL-кода для ген... 1516 просмотров Дэн Tue, 21 Nov 2017, 13:18:46
Использование памяти PGA и UGA...
Использование памяти PGA и UGA... 6398 просмотров Денис Tue, 21 Nov 2017, 13:31:33
NULL в ORACLE и как с ним можн...
NULL в ORACLE и как с ним можн... 7686 просмотров Андрей Васенин Wed, 01 Jul 2020, 08:11:51
Войдите чтобы комментировать