【发布时间】:2014-03-18 13:21:08
【问题描述】:
我正在维护一个通过 JDBC 创建 Oracle DB 的应用程序。从今天开始这个查询:
SELECT NULL AS pktable_cat ,
p.owner AS pktable_schem,
p.table_name AS pktable_name ,
pc.column_name AS pkcolumn_name,
NULL AS fktable_cat ,
f.owner AS fktable_schem,
f.table_name AS fktable_name ,
fc.column_name AS fkcolumn_name,
fc.position AS key_seq ,
NULL AS update_rule ,
DECODE (f.delete_rule, 'CASCADE', 0, 'SET NULL', 2, 1) AS delete_rule ,
f.constraint_name AS fk_name ,
p.constraint_name AS pk_name ,
DECODE(f.deferrable, 'DEFERRABLE',5 ,'NOT DEFERRABLE',7 , 'DEFERRED', 6 ) deferrability
FROM all_cons_columns pc,
all_constraints p ,
all_cons_columns fc,
all_constraints f
WHERE 1 = 1
AND p.table_name = :1
AND p.owner = :3
AND f.constraint_type = 'R'
AND p.owner = f.r_owner
AND p.constraint_name = f.r_constraint_name
AND p.constraint_type = 'P'
AND pc.owner = p.owner
AND pc.constraint_name = p.constraint_name
AND pc.table_name = p.table_name
AND fc.owner = f.owner
AND fc.constraint_name = f.constraint_name
AND fc.table_name = f.table_name
AND fc.position = pc.position
ORDER BY fktable_schem,
fktable_name ,
key_seq
由于一些 oracle 内部结构,它开始变得非常缓慢,因为它似乎对我所有的分支都是一样的。
有人知道一个可能的原因以及如何面对这个吗?
问候, 努齐奥
【问题讨论】:
-
您是否尝试过为您的查询生成解释计划?
-
我可以,这有什么帮助?我无法控制此内容。我的观点是:我们是否缺少任何维护步骤?该软件每天在我们的 CI 中运行数十次。现在我们遇到了这个奇怪的问题。
-
它会告诉你为什么查询很慢。如果您不知道导致缓慢的原因,您无法决定哪些维护步骤可能会或可能不会产生影响。
标签: java sql oracle jdbc database-metadata