Ajuda com Delete
Olá pessoal!
Estou tentando deletar alguns registros de minha tabela, mas este processo está demorando muito. Muito mesmo.
O código é o seguinte:
Tentei de outra forma, mas também não consegui. Deu erro
Alguém poderia me ajudar??
Obrigado
Daniel
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
Curtidas 0
Respostas
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...
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
25/01/2008
amigo, verifique se tem indices para esta tabela.
GOSTEI 0
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.
- 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
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
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?
Será que alguém tem alguma solução melhor?
GOSTEI 0
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.
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
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
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
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
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.
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
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.
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