Minhas exclusões no Oracle 11 são muito lentas. As tabelas são vinculadas por chaves estrangeiras e cada restrição de chave estrangeira possui uma cascata de exclusão definida.
Se eu apertar o botão de explicação em uma declaração como esta DELETE FROM TOP_LEVEL_TABLE WHERE SOMETHING = 'whatever'
, isso só mostra meu envolvimento, TOP_LEVEL_TABLE
mesmo que outras 30 tabelas estejam envolvidas.
Como posso obter um resultado mais realista?
Eu não acho que isso seja possível.
Se não me engano, o otimizador nem sabe (ou pelo menos não tenta saber) que o comando vai "tocar" outras tabelas também.
Não está explicitamente documentado, mas a seguinte citação do manual fala apenas sobre as tabelas "referenciadas" na instrução SQL (o destaque é meu):
Acho que a parte importante é: " tabelas referenciadas pela declaração ". Nenhuma menção de tabelas "dependentes".
Editar :
Se você precisar extrair essas informações, provavelmente precisará rastrear sua sessão e examinar a saída do TKPROF.
Não é possível ver todas as tabelas envolvidas em um plano de execução. Se os objetos bloqueados (por restrições de chave estrangeira em cascata) forem considerados, a consulta a seguir será útil.
Execute a seguinte consulta no
SYSTEM
esquema simultaneamente e atualize-a para ver quais tabelas dependentes estão envolvidas e bloqueadas (é mais fácil do que verificartkprof
em alguns casos).