Deletando devagar no Oracle? | Rogerio Angeliski
20 de agosto de 2017 • 1 min de leitura
uma deleção deveria ser rápida, não é mesmo?
Pois é. Como pode um negocio desses? Depois de muita procura e testes eu descobri o motivo. Durante uma deleção de registro o Oracle procura todas as referências daquela tabela e valida antes de executar. Em outras palavras, sempre que você executa um comando delete numa tabela, o Oracle pesquisa cada tabela que tem uma Foreign Key que aponta para para a tabela que você está tentando deletar. No meu caso, existia uma tabela imeeeeensa que tinha uma FK vinculada. Quando eu tentava deletar, o Oracle tinha que realizar um Full Scan para garantir que o registro que eu queria apagar não tinha nada vinculado. A Solução nesse caso foi criar um index que indexava somente a coluna da FK. Feito isso meu delete passou a ter um tempo de espera de 10s.
Galera comemorando
Claro, esse é um caso bem especifico. Existem ainda outras situações que você pode querer deletar muitos registros, nesse caso pode ser mais rápido, criar uma tabela apenas com os registros que você vai manter... Mas isso é tema de outro post, outro dia.