我在 Oracle 11 中的删除速度非常慢。这些表由外键链接,每个外键约束都设置了删除级联。
如果我在这样的语句上点击解释按钮,即使涉及 30 个其他表,DELETE FROM TOP_LEVEL_TABLE WHERE SOMETHING = 'whatever'
它也只会显示我的参与。TOP_LEVEL_TABLE
我怎样才能得到更真实的结果?
我在 Oracle 11 中的删除速度非常慢。这些表由外键链接,每个外键约束都设置了删除级联。
如果我在这样的语句上点击解释按钮,即使涉及 30 个其他表,DELETE FROM TOP_LEVEL_TABLE WHERE SOMETHING = 'whatever'
它也只会显示我的参与。TOP_LEVEL_TABLE
我怎样才能得到更真实的结果?
我不认为这是可能的。
如果我没记错的话,优化器甚至不知道(或至少不试图知道)该语句也会“触及”其他表。
它没有明确记录,但手册中的以下引用仅讨论了 SQL 语句中“引用”的表(重点是我的):
我认为重要的部分是:“语句引用的表”。没有提到“依赖”表。
编辑:
如果您需要提取该信息,您可能必须跟踪您的会话并查看 TKPROF 输出。
在执行计划中不可能看到所有涉及的表。如果要考虑锁定对象(通过级联外键约束),则以下查询将有所帮助。
同时对模式执行以下查询
SYSTEM
并刷新它以查看涉及和锁定哪些依赖表(tkprof
在某些情况下比检查更容易)。