- Este tópico contém 18 respostas, 5 vozes e foi atualizado pela última vez 16 anos, 9 meses atrás por
Thiago Vilhena.
-
AutorPosts
-
27 de maio de 2009 às 9:56 pm #87011
Thiago Vilhena
ParticipanteBoa tarde pessoal,
Tipo tava vendo por aqui uma parada!!
o que é mais custozo ao banco um insert com append ou sem append??
e como ficaria um insert com append??
sem append fica assim insert into scott.tab_sped_teste1 (id,funcionario) values(1,’thiago’);
com append como que fica essa query???
27 de maio de 2009 às 11:01 pm #87015David Siqueira
ParticipanteThiago, dê uma visitada nesse link abaixo , você vai descobrir quais os HINTS mais usados, e suas respectivas funções e utilizações :
http://www.oradev.com/hints.jsp
Abraço.
David
27 de maio de 2009 às 11:12 pm #87018Thiago Vilhena
Participantebeleza parceiro!! vo dar uma olhada e posto aqui duvidas!! xDDD
27 de maio de 2009 às 11:17 pm #87019Thiago Vilhena
Participantebeleza cara vi la tipo um exemplo de insert com append poderia ser assim
select ‘insert into values();’ from ;
???
27 de maio de 2009 às 11:24 pm #87020David Siqueira
ParticipanteNão sei o que vc esta tentando fazer..rsss.
Mais geralmente eu uso APPEND assim :insert /* APPEND */ into as select * from ;é apenas um exemplo , vc pode usa-lo da melhor maneira que quiser.
Abcs
David[/code]
27 de maio de 2009 às 11:45 pm #87021Thiago Vilhena
ParticipanteDavid desculpa cara mas eu estou viajando nesse negocio de append,
eu li no site que voce me enviou e ainda nao entendi que esse hint infeliz faz!!
28 de maio de 2009 às 12:26 am #87024David Siqueira
ParticipanteA melhor maneira de você descobrir pra que ele serve é fazendo um teste de Plano de execução com o uso de APPEND no seu processo de Insert e sem ele, você vai notar uma significativa diferença, basicamente ele é pra otimizar os seus processos de Insert, tornando-os mais ageis, em tabelas definidas com NOLLOGIN um comando insert com APPEND evita utilização de REDO desnecessária, vai direto por ROWID.
Abcs
David
28 de maio de 2009 às 2:52 pm #87028ramasine
ParticipanteA opção de APPEND MODE, que é um INSERT onde o banco :
– NÃO procura no “meio” dos datafiles por espaço livre, é feito sempre numa àrea livre mais ao fim do datafile
– NÃO gera muitos bytes de log, pois necessariamente já que o
INSERT é feito numa área livre não há “versão anterior” desses
blocos no disco, claramente no datafile eles estão vazios
– e mais importante, quase não gera informação de desfazer ( UNDO/ROLLBACK), por definição necessariamente num bd
relacional TODA e QUALQUER operação de DML obrigatoriamente tem que ser passível de ser desfeita enquanto o bd não receber um COMMIT,
então o bd Oracle normalmente além do log file é obrigado a manter
informação de desfazer, o chamado ROLLBACK ou UNDO. Claro, num insert onde é garantido que os blocos estavam em branco como é o caso do APPEND mode, não há o que desfazer (pois os blocos antes da operação estavam vazios!!), portanto será gerado muitíssimo menos
undo/rollback.Esse INSERT pode feito ou por vc (digitando um comando
tipo INSERT /*+ APPEND */ (select from fontedosdadosainserir), ou por
algumas tools Oracle como o sql*loader carregando de um arquivo-
texto.Abs
Marcelo28 de maio de 2009 às 4:12 pm #87030Rodrigo Mesquita
ParticipanteThiago,
Acredito que o que estão querendo é que vc realize uma medição de qual insert tem melhor tempo de execução.Leia o que o ramasine falou que vc vai entender bem a diferença entre os dois inserts.
no sqlplus faça assim:
Set timing on;
— faça o insert normal
insert into select * from ;
— depois execute o insert com o append
insert /* APPEND */ into as select * from ;28 de maio de 2009 às 4:14 pm #87031David Siqueira
ParticipanteBoa Ramasine, excelente explanação.
Abcs.
David
28 de maio de 2009 às 5:26 pm #87033Thiago Vilhena
ParticipantePessoal voces sao 1000, tipo eu entendi o que era pra fazer a unica duvida que ficou, por exemplo ROWNUM, WHERE isso é um hint append?
28 de maio de 2009 às 5:55 pm #87035ramasine
ParticipanteThiago,
O ROWNUM limita a quantidade de linhas do resultado…
Ex: select *
from
( select *
from tabela
order by critério )
where ROWNUM <= 10Traz apenas as 10 primeiras linhas que atendem a consulta!
Abs
Marcelo Ramasine
28 de maio de 2009 às 5:55 pm #87036Thiago Vilhena
Participanteto procurando na documentação do oracle ve se eu acho exemplos desse cara ai!
28 de maio de 2009 às 6:42 pm #87041Thiago Vilhena
ParticipanteBeleza marcelao. Mas rownum é um hint append???
28 de maio de 2009 às 7:01 pm #87042ramasine
ParticipanteNão Thiago!
O rownum é um pseudo-código do Oracle para a identificação de registros!
Ex: select * from tabela where rownum between 1 and 5;
Traz os 5 primeiros colocados….
Mas o rownum não é um HINT de append, se bem entendi o que vc colocou..
Abs
Marcelo
-
AutorPosts
- Você deve fazer login para responder a este tópico.