Понимание конечной цели определенно было бы полезно.
Вы можете запросить таблицу GV$SQL_PLAN
, чтобы узнать, какие запросы в общем пуле используют определенный индекс
SELECT *
FROM gv$sql_plan
WHERE object_owner = <<owner of object>
AND object_name = <<name of index>>
Однако в зависимости от вашей системы операторы SQL могут не оставаться в общем пуле особенно долго, поэтому вам может потребоваться относительно частый опрос, чтобы убедиться, что вы ничего не пропустили. В зависимости от версии, редакции и лицензированных опций Oracle, вы также можете запросить таблицы AWR, чтобы получить историческую информацию о плане. Но это будет иметь информацию только по запросам, которые были достаточно дорогими, чтобы они были зафиксированы в снимке AWR.
SELECT *
FROM dba_hist_sql_plan
WHERE object_owner = <<owner of object>
AND object_name = <<name of index>>
Если вы пытаетесь выяснить, используется ли индекс, тем не менее, вы, вероятно, захотите использовать что-то вроде мониторинг индекса и позволить Oracle отслеживать, какие индексы используются. Однако следует помнить, что в этом подходе есть подводные камни. Например, индексы на внешних ключах , которые необходимы для эффективного удаления, не могут быть помечены как используемые для мониторинга индекса (и при этом они не будут обнаружены при просмотре планов запросов). Мониторинг индекса может также пропустить случаи, когда статистика по индексу используется для составления эффективного плана, несмотря на то, что сам индекс не используется.