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

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

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

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

  1. ALTER INDEX OWNER.INDEX_NAME NOMONITORING USAGE;
  2.  

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

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

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

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

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

Источники
http://apps-oracle.ru/oracle_index_usage/ https://oracle-base.com/articles/10g/index-monitoring
06:45
4.71K
Нет комментариев. Ваш будет первым!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.