Sql 如何加快对Oracle的查询(选择表中包含FK的所有表名称)

Sql 如何加快对Oracle的查询(选择表中包含FK的所有表名称),sql,performance,oracle,Sql,Performance,Oracle,如果我无法更改数据库规则和结构,请提供帮助,以加快查询速度,选择当前表上有引用的所有表名和列名 多谢各位 SELECT DISTINCT AC.table_name, ACC.column_name FROM all_constraints AC INNER JOIN all_cons_columns ACC ON ACC.table_name = AC.table_name AND ACC.constraint_name = A


如果我无法更改数据库规则和结构,请提供帮助,以加快查询速度,选择当前表上有引用的所有表名和列名
多谢各位

SELECT 
  DISTINCT AC.table_name, ACC.column_name  
FROM 
  all_constraints AC 
  INNER JOIN all_cons_columns ACC 
    ON ACC.table_name = AC.table_name 
       AND  
       ACC.constraint_name = AC.constraint_name  
WHERE 
  AC.r_constraint_name IN  (
    SELECT AC.constraint_name 
    FROM all_constraints AC 
    WHERE 
     table_name='CURRENT_TABLE' 
     AND 
     owner='SOME_DATABASE_NAME'
  )

如果希望我们帮助优化查询,则需要向我们显示表和索引定义,以及每个表的行计数。也许您的表定义不好。可能索引没有正确创建。也许你在你认为你有的专栏上没有索引。如果看不到表和索引定义,我们无法判断。我们还需要行计数,因为这会极大地影响查询优化。如果您知道如何进行
解释
或获得执行计划,请将结果也放在问题中。请参阅下面的链接。还有一个代码片段可以找出不同种类的依赖项。首先提及您使用的Oracle版本。还请注意,您应该在Oracle dictionary上计算统计数据-否则(尤其是在旧版本上)将使用基于规则的优化器。@AndyLester此查询仅使用标准数据字典视图,无需发布表和索引定义。甚至解释计划也帮不了什么忙——对我来说,访问未记录的表需要100多个步骤。知道返回的行数可能会有所帮助,但数据分布确实需要知道海报的整个数据库。调整哪怕是一个微不足道的数据字典查询也可能很困难。