【问题标题】:How to find references to a particular index?如何查找对特定索引的引用?
【发布时间】:2018-03-08 10:51:29
【问题描述】:

如何找到对特定索引的所有数据库引用(例如 az INDEX 优化器提示)?

(我打算删除一个索引,并且需要知道它是否有关联的依赖对象。)

【问题讨论】:

  • 检查DBA_DEPENDENCIES
  • 我想知道 INDEX 怎么会有任何依赖关系。提示只是 cmets,它们没有列在任何依赖关系表中。也许看看Index Monitoring
  • @Narayan SELECT * FROM ALL_DEPENDENCIES WHERE REFERENCED_TYPE = 'INDEX';仅显示一些 SYS 拥有的对象使用的几个 XDB 拥有的结果。没有任何真正的索引依赖的痕迹。 (我正在一个包含数百个实际索引的大型遗留数据库上对此进行测试。)
  • @WernfriedDomscheit 您应该将此评论作为答案发布,以便我接受。

标签: sql oracle indexing


【解决方案1】:

特别是,此sql 的此sql_text 列可能对单个索引有帮助:

select p.sql_id, q.sql_text, p.access_predicates
  from gv$sql_plan p
 inner join gv$sql q on ( p.sql_id = q.sql_id )  
 where p.object_name = upper('&i_index_name') 
 group by p.access_predicates, q.sql_text, p.sql_id
 order by p.access_predicates, q.sql_text, p.sql_id;

【讨论】:

    【解决方案2】:

    索引没有任何依赖关系。索引基于表和列。如果您想知道任何查询是否使用了索引,您可以使用Index Monitoring 功能。

    您可以通过

    启用/禁用监控
    ALTER INDEX my_index_i MONITORING USAGE;
    ALTER INDEX my_index_i NOMONITORING USAGE;
    

    然后您可以在视图v$object_usage(适用于12.1 及更低版本)或dba_object_usage 中查看索引使用情况

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 2018-04-24
      • 2022-11-02
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 2012-08-06
      相关资源
      最近更新 更多