none
Delete - Dúvida RRS feed

  • Pergunta

  • Amigos,

     

    estou querendo usar o camando Delete com uma condição mais está demorando muito para ser executado. Tem algum outro comando para excluir certos registros.

    quarta-feira, 8 de outubro de 2008 14:14

Respostas

  • Bom dia,


    A lentidão talvez seja por causa de alguma trigger. Verifique se a tabela possui alguma.

    Existe o TRUNCATE TABLE, mas CUIDADO, ele apaga TODOS os registros da tabela, de forma bem mais eficaz comparado com o delete sem where.


    Dependendo da quantidade de registros que estão sendo excluídos pode apagar por partes, usando o comando TOP.


    Ex.:

    Tabela Cliente (cod int, nome varchar(50), idade smallint)

    Quero apagar todos os Clientes que tem idade inferior a 30.

    Code Snippet
    delete from cliente
    where idade < 30

     

     



    Porém são milhares de clientes e está demorando bastante. É só fazer parte a parte..


    Code Snippet
    delete from Cliente
    where

    cod in (select top 100 cod from cliente

    where idade < 30

    order by cod )

     

     


    Então será deletado de 100 em 100 clientes.

     

    Espero ter ajudado.

     

    quarta-feira, 8 de outubro de 2008 14:56

Todas as Respostas

  • Bom dia,


    A lentidão talvez seja por causa de alguma trigger. Verifique se a tabela possui alguma.

    Existe o TRUNCATE TABLE, mas CUIDADO, ele apaga TODOS os registros da tabela, de forma bem mais eficaz comparado com o delete sem where.


    Dependendo da quantidade de registros que estão sendo excluídos pode apagar por partes, usando o comando TOP.


    Ex.:

    Tabela Cliente (cod int, nome varchar(50), idade smallint)

    Quero apagar todos os Clientes que tem idade inferior a 30.

    Code Snippet
    delete from cliente
    where idade < 30

     

     



    Porém são milhares de clientes e está demorando bastante. É só fazer parte a parte..


    Code Snippet
    delete from Cliente
    where

    cod in (select top 100 cod from cliente

    where idade < 30

    order by cod )

     

     


    Então será deletado de 100 em 100 clientes.

     

    Espero ter ajudado.

     

    quarta-feira, 8 de outubro de 2008 14:56
  • A demora pode ser devido a foreign keys, verifique no plano de execução de seu delete se ele está fazendo apenas o delete ou se ele está validando várias outras tabelas dependentes dos dados que você está excluindo...

    Escrevi falando sobre DELETE em um post no meu blog, talvez possa ser utíl para você

    http://fabianosqlserver.spaces.live.com/Blog/cns!52EFF7477E74CAA6!250.entry

    quarta-feira, 8 de outubro de 2008 16:55
  • Olá Daniel,

     

    Gostaria de saber o seguinte:

     

    - Quantos registros estão sendo deletados ?

    - A tabela que vai sofrer o DELETE passa sua PK para outras tabelas ? 

    - O que é "demorar muito" ?

    - A tabela possuir triggers (utilize o comando sp_helptrigger 'Nome da Tabela')

     

    Com base nisso podemos começar a discutir o seu problema.

     

    [ ]s,

     

    Gustavo

    quarta-feira, 8 de outubro de 2008 17:08