GARANTIR DESCONTO

Fórum Ajuda com Delete #59364

25/01/2008

0

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

Responder

Posts

05/02/2008

Maxymus

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...


Responder

Gostei + 0

05/02/2008

Sremulador

amigo, verifique se tem indices para esta tabela.


Responder

Gostei + 0

06/02/2008

Daniel Grillo

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.


Responder

Gostei + 0

06/02/2008

Daniel Grillo

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)



Responder

Gostei + 0

06/02/2008

Daniel Grillo

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?


Responder

Gostei + 0

27/02/2008

Emerson Nascimento

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.


Responder

Gostei + 0

27/02/2008

Daniel Grillo

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


Responder

Gostei + 0

27/02/2008

Emerson Nascimento

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?


Responder

Gostei + 0

27/02/2008

Daniel Grillo

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.


Responder

Gostei + 0

27/02/2008

Emerson Nascimento

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.


Responder

Gostei + 0

29/02/2008

Daniel Grillo

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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar