Как узнать используется индекс или нет ORACLE DB?

Первый способ — это включить мониторинг использования индекса.

1) Сначала включаем мониторинг интересующих нас индексов
ALTER INDEX OWNER.INDEX_NAME MONITORING USAGE;
2) После того, как отработала программа, которая потенциально должна была использовать индекс, выполняем запрос
select io.name as index_name
     , t.name  as table_name
     , decode(bitand(i.flags, 65536), 0, 'NO', 'YES') as monitoring
     , decode(bitand(ou.flags, 1), 0, 'NO', 'YES')    as used
     , ou.start_monitoring as start_monitoring
     , ou.end_monitoring   as end_monitoring
  from sys.obj$         io
     , sys.obj$         t
     , sys.ind$         i
     , sys.object_usage ou
 where i.obj# = ou.obj#
   and io.obj# = ou.obj#
   and t.obj# = i.bo#;

3) Выключаем мониторинг индекса

ALTER INDEX OWNER.INDEX_NAME NOMONITORING USAGE;

Есть также view V$OBJECT_USAGE, но она показывает данные только для текущей схемы.

Второй способ — это использования индекса в планах запроса

Для этого можно использовать следующий селект

select *
       from V$SQL_PLAN
      where object_name = upper('Имя индекса')

Если индекс используется, то он попадет в выборку. По sql_id можно в v$SQL можно найти достать текст sql запроса.

06:45
1854
Нет комментариев. Ваш будет первым!
Загрузка...