Diferenças entre Truncate table, Drop table ou Delete from
agosto 14, 2013 - Backup, Literatura, Performance - Tagged: delete, delete from, drop, drop table, High Water Mark, marca d'agua, truncate, truncate table - no comments
Muitas vezes nos deparamos com a situação de limpar os registros em alguma determinada tabela.
Porem, qual comando usar? Qual comando é mais rápido para o Banco de dados? Ou qual comando atenderá a sua necessidade?
Porem, qual comando usar? Qual comando é mais rápido para o Banco de dados? Ou qual comando atenderá a sua necessidade?
Veremos a seguir qual é o melhor caminho para a sua necessidade.
Truncate table: É um DDL, serve para remover todas as linhas de uma tabela. Com o comando truncate você não tem a opção de escolher quais dados remover e não há retorno dos mesmos caso necessite, Este comando remove a marca d’agua da tabela limpando a mesma para uma próxima utilização.
Sintaxe:
Truncate table <table_name>;
Truncate table <table_name>;
exemplo:
1
2
3
4
5
| SQL> truncate table trunc_table; Table truncated. SQL> |
Drop table: Também é um comando DDL, serve para remover toda a tabela (estrutura, indices, contraints, etc…), não há retorno dos dados caso seja necessário, a menos que a recyclebin do oracle esteja habilitada, veja mais sobre este assunto neste post.
Sintaxe:
Drop table <table_name>;
exemplo:
Drop table <table_name>;
exemplo:
1
2
3
4
5
| SQL> drop table trunc_table; Table dropped. SQL> |
Delete from: É um comando DML e serve para remover registros da tabela, semelhante ao truncate, com mais opções, com ele é permitido você deletar apenas alguns registros da tabela alvo. Porem este comando não remove a marca d’agua da tabela mantendo a mesma do mesmo tamanho caso seja um delete full.
Sintaxe:
delete from <table_name> [where coluna=valor];
delete from <table_name> [where coluna=valor];
exemplo:
Para o exemplo foi criado uma tabela com os dados da visão v$tablespace;
Para o exemplo foi criado uma tabela com os dados da visão v$tablespace;
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| SQL> create table trunc_table as select * from v$tablespace; Table created. SQL> select * from trunc_table; TS# NAME INC BIG FLA ENC ---------- ------------------------------ --- --- --- --- 0 SYSTEM YES NO YES 1 SYSAUX YES NO YES 2 UNDOTBS1 YES NO YES 4 USERS YES NO YES 3 TEMP NO NO YES SQL> delete from trunc_table where NAME = 'SYSTEM' ; 1 row deleted. SQL> select * from trunc_table; TS# NAME INC BIG FLA ENC ---------- ------------------------------ --- --- --- --- 1 SYSAUX YES NO YES 2 UNDOTBS1 YES NO YES 4 USERS YES NO YES 3 TEMP NO NO YES SQL> delete from trunc_table; 4 rows deleted. SQL> select * from trunc_table; no rows selected SQL> |
Observe que criei a tabela com os dados da visão v$tablespace, após o mesmo deletei apenas um registro com o campo “where NAME=’SYSTEM'” e após conferir, deletei os outros registros.
Resumindo.
Caso queira deletar todos os registros de uma tabela, por ser mais rápido e por já limpar a marca d’agua da tabela é aconselhável utilizar o truncate, Caso seja necessário deletar apenas alguns registros da tabela sugiro utilizar o delete, e caso você deseja eliminar a tabela de seu Banco de dados Oracle juntamente com os objetos referentes a esta tabela o “drop table”, é a solução.
Nenhum comentário:
Postar um comentário