Ajuda com Delete

Firebird

25/01/2008

Olá pessoal!

Estou tentando deletar alguns registros de minha tabela, mas este processo está demorando muito. Muito mesmo.

O código é o seguinte:

delete from EVENTOS E where E.ID_EVENTOS in (SELECT FIRST 100 * FROM EVENTOS order by ID_Eventos desc)

Tentei de outra forma, mas também não consegui. Deu erro
delete from (SELECT FIRST 100 * FROM EVENTOS order by ID_Eventos desc)


Alguém poderia me ajudar??

Obrigado

Daniel


Daniel Grillo

Daniel Grillo

Curtidas 0

Respostas

Maxymus

Maxymus

25/01/2008

Irmão, tua tabela possui muitos registros?
tua base de dados está em rede ou Local?
Qdo tu faz uma consulta, demora muito pra trazer os registros filtrados?

Tem que ver...no Interbase, eu já tive problemas como esse seu.. de filtrar ou fazer alguma operação e ele demorar a atualizar... nunca descobri exatamente o que podia ser.. por fim, mudei para firebird 2.0 .. meus problemas acabaram...


GOSTEI 0
Sremulador

Sremulador

25/01/2008

amigo, verifique se tem indices para esta tabela.


GOSTEI 0
Daniel Grillo

Daniel Grillo

25/01/2008

Olá Maximus! Respondendo:

- Eu utilizo firebird 2.0.3.
- A minha tabela não tem muitos registros a princípio, mas poderá vir a ter. Mas com poucos registros mesmo assim é muito lento para apagar.
- Quando eu faço uma consulta não demora nada além do normal para filtrar.


GOSTEI 0
Daniel Grillo

Daniel Grillo

25/01/2008

amigo, verifique se tem indices para esta tabela.

Olá sremulador,

A minha tabela possui índice sim.
Tentei desta forma também e não deu certo:
delete
FROM (select first 10 e.id_eventos from eventos E order by e.id_eventos desc)



GOSTEI 0
Daniel Grillo

Daniel Grillo

25/01/2008

O que eu quero fazer é um arquivo morto. Há um bd principal que recebe eventos. Eu quero que, por exemplo, a cada 100 eventos esses eventos sejam copiados para outro bd chamado ´Arquivo Morto´. Depois de devidamente copiados eu tento apagar através dos códigos SQL que postei, mas demora muito.

Será que alguém tem alguma solução melhor?


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

25/01/2008

uma coisa: você conseguiu resolver o problema?

outra: não está com um erro de conceito??? você sempre enviará para o arquivo morto os 100 registros mais recentes? não deveriam ser os 100 mais antigos? estou perguntando isso por conta do [b:4aeafb480a]desc[/b:4aeafb480a] na ordenação.


GOSTEI 0
Daniel Grillo

Daniel Grillo

25/01/2008

uma coisa: você conseguiu resolver o problema?


Não, ainda não consegui.

outra: não está com um erro de conceito??? você sempre enviará para o arquivo morto os 100 registros mais recentes? não deveriam ser os 100 mais antigos? estou perguntando isso por conta do [b:e08c0598a1]desc[/b:e08c0598a1] na ordenação.

Acho que não, observe o exemplo:
Imagine o ID de minha tabela:
1
2
3
4
5
6
7
8
9
10

Se eu mandar ordenar ´desc´ vai ficar desta forma:
10
9
8
7
6
5
4
3
2
1
Ou seja, do mais antigo para o mais novo. Concorda?
Daí eu determino o nº de registros que pegarei, por exemplo 5.
Então vai ficar:
10
9
8
7
6


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

25/01/2008

então... os registros de 6a 10 não são os mais novos????os arquivos enviados para o arquivo-morto não deveriam ser os de 1 a 5, que são os mais velhos?


GOSTEI 0
Daniel Grillo

Daniel Grillo

25/01/2008

então... os registros de 6a 10 não são os mais novos????os arquivos enviados para o arquivo-morto não deveriam ser os de 1 a 5, que são os mais velhos?

É verdade você tem razão!! Não me atentei a isso. Fiquei tão preocupado com a demora que nem vi isso.


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

25/01/2008

selecione os 100 primeiros registros, copie pra onde você deseja e guarde o último id.
select first 100 * from eventos order by id_eventos (sem desc)

depois faça apaque os registros cujo id seja menor ou igual aquele guardado.
delete from EVENTOS where ID_EVENTOS <= ultimo_id_guardado

é necessário mais detalhes do processo de cópia para saber se é possível obter o último id copiado.


GOSTEI 0
Daniel Grillo

Daniel Grillo

25/01/2008

Bom Emerson, analisando o que você propos parece que vai dar certinho. Obrigado pela dica!!
Só que eu estou fazendo uma alteração hyper urgente no software e somente poderei testar (e implementar) na semana que vem. Dai eu te falo como foi.

Obrigado novamente.


GOSTEI 0
POSTAR