Diferença entre a tabela da gota e mesa truncar?
-
02-07-2019 - |
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.
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
- 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 - Podemos usar cláusula
WHERE
emDELETE
mas emTRUNCATE
você não pode usá-lo - 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 - 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 -
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 - declaração
DELETE
faz coluna de identidade nãoRESEED
mas a declaraçãoTRUNCATE
RESEEDS
o colunaIDENTITY
- Você não pode usar
TRUNCATE TABLE
em tabelas que:- são referenciados por uma restrição
FOREIGN KEY
. (Você pode truncar uma tabela que tem uma chave estrangeira que se referências.) - Participar de uma exibição indexada.
- são publicados pelo usando a replicação transacional ou replicação de mesclagem
- são referenciados por uma restrição
-
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 ??strong> 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