Fórum Ajuda com Delete #59364
25/01/2008
0
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
Curtir tópico
+ 0Posts
05/02/2008
Maxymus
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
05/02/2008
Sremulador
Gostei + 0
06/02/2008
Daniel Grillo
- 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
06/02/2008
Daniel Grillo
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
06/02/2008
Daniel Grillo
Será que alguém tem alguma solução melhor?
Gostei + 0
27/02/2008
Emerson Nascimento
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
27/02/2008
Daniel Grillo
Não, ainda não consegui.
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
27/02/2008
Emerson Nascimento
Gostei + 0
27/02/2008
Daniel Grillo
É verdade você tem razão!! Não me atentei a isso. Fiquei tão preocupado com a demora que nem vi isso.
Gostei + 0
27/02/2008
Emerson Nascimento
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
29/02/2008
Daniel Grillo
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
Clique aqui para fazer login e interagir na Comunidade :)