Pergunta

Eu tenho algumas tabelas que eu construo como uma parte do meu relatório cumulativo. Eu não preciso-los depois em tudo. Alguém mencionou para truncar-los, uma vez que seria mais rápido.

Foi útil?

Solução

A exclusão de registros de uma tabela registra todas exclusão e executa os gatilhos de exclusão para os registros excluídos. Truncar é um comando mais poderoso que esvazia uma tabela sem efetuar cada linha. SQL Server impede que você truncar uma tabela com chaves estrangeiras referência a ele, por causa da necessidade de verificar as chaves estrangeiras em cada linha.

truncar é normalmente ultra-rápido, ideal para limpar dados de uma tabela temporária. Ele faz preservar a estrutura da tabela para uso futuro.

Se você realmente deseja remover a tabela definições , bem como os dados, basta eliminar as tabelas.

este artigo MSDN para mais informações

Outras dicas

DROP TABLE exclui a tabela.

esvazia truncar a tabela lo, mas deixa a sua estrutura de dados futuros.

GOTA e TRUNC fazer coisas diferentes:

TABLE TRUNCATE

Remove todas as linhas de uma tabela sem log as deleções de linha individuais. TRUNCATE TABLE é semelhante ao DELETE sem cláusula WHERE; no entanto, TRUNCATE TABLE é mais rápido e usa menos sistema e log de transações recursos.

TABLE DROP

Remove um ou mais definições de tabela e todos os dados, índices, gatilhos, restrições e permissão especificações para essas tabelas.

No que diz respeito a velocidade está em causa a diferença deve ser pequena. E de qualquer maneira, se você não precisa a estrutura da tabela em tudo, certamente usar DROP.

Eu acho que você significa a diferença entre a tabela apagar e TABLE TRUNCATE.

TABLE DROP

remover a tabela do banco de dados.

TABLE excluir

sem uma condição excluir todas as linhas. Se houver gatilho e referências, então isso vai processar para cada linha. Além disso, um índice será modificar, se houver um.

TABLE TRUNCATE

definir a contagem de linha zero e sem efetuar cada linha. Que é muito mais rápido do que o outro tanto.

Nenhum destes ponto resposta a uma diferença importante sobre estas duas operações. drop table é uma operação que pode ser revertida. voltar No entanto, truncate não pode ser rolada [ 'TABLE TRUNCATE' pode ser revertida assim]. Desta forma, soltando uma tabela muito grande pode ser muito caro se houver muitas linhas, porque todos eles têm de ser registadas num espaço temporário no caso de você decidir revertê-lo.

Normalmente, se eu quiser se livrar de uma grande mesa, vou truncar-lo, em seguida, solte-o. Desta forma, os dados serão vetou sem registro, e a tabela pode ser descartado, e que a queda será muito barato, porque há necessidades de dados a ser gravado.

É importante salientar que embora truncada apenas exclui dados, deixando a mesa, enquanto queda será, de fato, apagar os dados e a própria tabela. (Assumindo chaves estrangeiras não impedem tal ação)

TRUNCATE TABLE mantém todo o seu velho indexação e outros enfeites. DROP TABLE seria, obviamente, se livrar da mesa e exigem que você recriá-lo mais tarde.

DROP TABLE

DROP TABLE [table_name];

O comando DROP é usado para remover uma tabela de banco de dados. É um comando DDL. Todas as linhas, índices e privilégios da tabela também serão removidos. operação GOTA não pode ser revertida.

Tabela excluir

DELETE FROM [table_name]
WHERE [condition];

DELETE FROM [table_name];

O comando DELETE é um comando DML. Ele pode ser usado para excluir todas as linhas ou algumas linhas da tabela com base na condição especificada na cláusula WHERE. Ele é executado através de um bloqueio de linha, cada linha da tabela está bloqueada para exclusão. Ele manter o log de transações, por isso é mais lento do que TRUNCATE. operações DELETE pode ser revertida.

truncar a tabela

TRUNCATE TABLE [table_name];

O comando TRUNCATE remove todas as linhas de uma tabela. Não irá registrar a exclusão de cada linha, em vez disso, registra o deallocation das páginas de dados da tabela, o que torna mais rápido que DELETE. Ele é executado através de um bloqueio de tabela e tabela inteira está bloqueado para remover todos os registos. É um comando DDL. operações TRUNCATE não pode ser revertida.

Gota se livrar da mesa completamente, removendo a definição também. esvazia truncar a tabela, mas não se livrar da definição.

Truncando tabela esvazia a mesa. Soltando a mesa exclui-lo inteiramente. Qualquer um vai ser rápido, mas deixá-la cair provavelmente será mais rápido (dependendo do seu motor de banco de dados).

Se você não é mais necessário, solte-o para que ele não está bagunçando seu esquema.

TableA EXCLUIR vez de TRUNCATE TableA? Um equívoco comum é que eles fazem a mesma coisa. Não tão. Na verdade, existem muitas diferenças entre os dois.

Excluir é uma operação registrada em uma base por linha. Isso significa que a exclusão de cada linha é registrado e fisicamente eliminado.

Você pode excluir qualquer linha que não irá violar uma restrição, deixando a chave estrangeira ou outra contraint no lugar.

TRUNCATE é também uma operação registrada, mas de uma maneira diferente. TRUNCATE registra o deallocation das páginas de dados em que os dados existe. A desalocação de páginas de dados significa que seus dados linhas ainda existem realmente nas páginas de dados, mas o extensões foram marcadas como vazio para reutilização. Isso é o que marcas truncar uma operação mais rápida para executar mais de DELETE.

Você não pode truncar uma tabela que tem qualquer chave estrangeira restrições. Você terá que remover os constrangimentos, truncar o tabela e reaplicar o contraints.

TRUNCATE irá repor as colunas de identidade para a semente padrão valor.

O comando TRUNCATE remove todas as linhas, mas não a própria tabela, é essencialmente equivalente a apagar com nenhuma cláusula onde, mas geralmente mais rápido.

Eu tenho uma correção para uma das afirmações acima ... "truncate não pode ser revertida"

truncar pode ser revertida. Há alguns casos em que você não pode fazer um truncar ou queda tabela, como quando você tem uma referência de chave estrangeira. Para uma tarefa, como relatórios mensais, eu provavelmente apenas uma gota da mesa, uma vez que não é mais necessário. Se eu estava fazendo este relato cumulativo mais frequentemente então eu provavelmente manter a tabela em vez disso e uso truncado.

Espero que isso ajude, aqui está mais algumas informações que você deve encontrar útil ...

Por favor, consulte o seguinte artigo para obter mais detalhes: http://sqlblog.com/blogs/denis_gobo/archive/ 2007/06/13 / 1458.aspx

Além disso, para obter mais detalhes sobre truncar vs. de exclusão, consulte este artigo: http://www.sql-server-performance.com/faq/delete_truncate_difference_p1. aspx

Obrigado! Jeff

TRUNCATE TABLE é funcionalmente idêntico ao DELETE sem Cláusula WHERE: ambos remover todas as linhas a mesa. Mas TRUNCATE TABLE é mais rápido e usa menos sistema e recursos de log de transações do que excluir.

A instrução DELETE remove linhas uma de cada vez e registra uma entrada no log de transações para cada linha excluída. TRUNCAMENTO TABELA remove os dados pela desalocá as páginas de dados usados ??para armazenar os dados da tabela, e apenas o deallocations página são registrados no Transaction Log.

TRUNCATE TABLE remove todas as linhas de uma mesa, mas a estrutura da tabela e os seus colunas, restrições, e assim por índices em permanecer. O contador utilizado por um identidade para novas linhas é redefinido para o sementes para a coluna. Se você quiser manter o contador de identidade, uso APAGAR vez. Se você deseja remover definição de tabela e seus dados, use o Instrução DROP TABLE.

Você não pode usar TRUNCATE TABLE em uma tabela referenciada por uma chave estrangeira limitação; em vez disso, utilize DELETE declaração sem uma cláusula WHERE. Porque TRUNCATE TABLE não está logado, ele não pode ativar um gatilho.

TRUNCATE TABLE não pode ser utilizado em tabelas que participam de um indexado view.

A partir http://msdn.microsoft.com /en-us/library/aa260621(SQL.80).aspx

No padrão SQL, drop table remove a tabela eo esquema da tabela -. TRUNCATE remove todas as linhas

As respostas aqui corresponder-se com a pergunta, mas eu vou responder a pergunta que você não pediu. "Devo usar truncar ou excluir?" Se você estiver removendo todas as linhas de uma tabela, você normalmente deseja truncar, já que é muito mais rápida. Por que é muito mais rápido? Pelo menos no caso da Oracle, ele redefine a marca de água de alta . Este é basicamente um dereferencing dos dados e permite que o db para reutilizá-lo para outra coisa.

Excluir VS TRUNCATE

  1. A declaração DELETE remove linhas um de cada vez e registra uma entrada na transação log para cada linha excluída. TRUNCATE TABLE remove os dados por desalocando os dados páginas usadas para armazenar os dados da tabela e registros apenas os deallocations página no log de transações
  2. Podemos usar cláusula WHERE em DELETE mas em TRUNCATE você não pode usá-lo
  3. Quando a instrução DELETE é executado usando um bloqueio de linha, cada linha da tabela é bloqueada para exclusão. TRUNCATE TABLE sempre bloqueia a tabela e página, mas não cada linha
  4. Depois de uma declaração DELETE é executado, a tabela pode ainda conter pages.If esvazie o operação de exclusão não usa um bloqueio de tabela, a tabela (pilha) irá conter muitos vazia Páginas. Para índices, a operação de exclusão pode deixar páginas vazias por trás, embora estes
    páginas serão desalocadas rapidamente por um processo de limpeza de fundo
  5. TRUNCATE TABLE remove todas as linhas de uma tabela, mas a estrutura da tabela e suas colunas, restrições, índices e assim por diante permanecem
  6. declaração DELETE faz coluna de identidade não RESEED mas a declaração TRUNCATE RESEEDS o coluna IDENTITY
  7. Você não pode usar TRUNCATE TABLE em tabelas que:
    1. são referenciados por uma restrição FOREIGN KEY. (Você pode truncar uma tabela que tem uma chave estrangeira que se referências.)
    2. Participar de uma exibição indexada.
    3. são publicados pelo usando a replicação transacional ou replicação de mesclagem
  8. TRUNCATE TABLE não pode ativar um gatilho porque a operação não registra indivíduo eliminações de linha

DELETE

instrução DELETE linhas da tabela de exclusão e retornar o número de linhas é excluído do table.in esta afirmação, usamos onde cláusula para dados apagados da mesa

  • instrução DELETE é mais lento do que declaração truncar porque os registros excluídos, um por um

Declaração truncar

declaração truncar Deleted ou remover todas as linhas da tabela.

  • É mais rápido do que a instrução DELETE porque apagados todos os registros da tabela
  • instrução TRUNCATE não devolver o nº de linhas são excluídas da tabela

instrução DROP

instrução DROP apagado todos os registros, bem como a estrutura da tabela

Excluir

O comando DELETE é usado para remover linhas de uma tabela. Uma cláusula WHERE pode ser usado para remover apenas algumas linhas. Se nenhuma condição WHERE é especificada, todas as linhas serão removidas. Depois de realizar uma operação de exclusão é preciso Confirmar ou reverter a transação para fazer a mudança permanente ou para desfazê-lo.

TRUNCATE

TRUNCATE remove todas as linhas de uma tabela. A operação não pode ser revertida ... Como tal, TRUCATE é mais rápido e não usa tanto espaço desfazer como um DELETE.

De: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands

Gota queda tabela inteira e toda a sua estrutura

truncar excluir todas as linhas da tabela é diferente de excluir que também índices de exclusão de linhas

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top