- Este tópico contém 6 respostas, 4 vozes e foi atualizado pela última vez 15 anos atrás por
Fábio Prado.
-
AutorPosts
-
27 de fevereiro de 2011 às 8:51 am #98417
caiocs0603
ParticipanteOlá pessoal fiz uma sequence de auto inclremente, começa no 1 e acresenta-se de 1 em 1, minha duvida é a seguinte: é recomendavel utiliza-la em todas as minhas tabelas, ou é melhor criar uma para cada tabela?
28 de fevereiro de 2011 às 3:21 pm #98418Peterson
ParticipanteVocê usando a sequence em mais de uma tabela, vai gerar buracos na sua sequencia.
Imagine… na tabela A você gera o números 1,2,3
aí na tabela B ocorre um INSERT usando a mesma sequence… e lá o NEXTVAL gera os números 4,5,6…
quando houver novo INSERT na tabela A… a sequence irá preencher com os números 7,8,9… sua sequencia de registros ficará 1,2,3,7,8,9
se puder conviver com isso… não tem problemas.
28 de fevereiro de 2011 às 4:07 pm #98419burga
ParticipanteO mais comum é criar uma sequência pra cada tabela, mas como o Peterson disse, não é necessário e o único problema são as janelas de números vazias. Nunca vi recomendação alguma em relação a isto…
28 de fevereiro de 2011 às 4:39 pm #98420Peterson
ParticipanteRecomendo que configure um valor legal para o cache da sequence, já que ela será muito utilizada (várias tabelas simultâneamente).
1 de março de 2011 às 2:50 am #98445caiocs0603
Participantemister peterson, poderia explicar melhor essa história de cache q vc falow, e obrigado ae, vc e o burga
1 de março de 2011 às 3:09 am #98446burga
ParticipanteNo comando para criar uma seqüência, existe uma cláusula cache N onde N indica a quantidade de números da seqüência que serão carregadas na memória (queimadas) a cada vez que a seqüência for chamada em uma sessão.
Por exemplo:
Imagine que você tem uma seqüência SEQ com CACHE 20 iniciando em 1.
Em uma das sessões ativas no banco o comando SEQ.NEXTVAL é acionado.
Então a sessão reserva na memória os números da seqüência de 1 a 20 para serem usados, sendo que o 1 é utilizado na primeira vez que você chamou o comando. Nas próximas vezes que o comando SEQ.NEXTVAL for acionado nesta sessão, o número será pego direto da memória (2, 3, 4…) e não do objeto do banco.
Se uma segunda sessão chamar SEQ.NEXTVAL, esta reservará os números de 21 a 40, e assim por diante… Ou seja, se todos os números (de 1 a 40) forem utilizados, a seqüência será acessada somente 2 vezes e não 40 vezes (como seria com cache 1 ou nocache).
Caso as sessões não usem todos os números, estes serão perdidos… Mas se janelas de números vazias nas suas tabelas não são um problema, números perdidos das seqüências também não representam problemas…
A única coisa que se deve atentar é em relação ao tamanho dos campos que receberão estes números, pois o crescimento dos valores será bem mais rápido do que utilizando 1 seqüência para cada tabela e com caches menores…
3 de março de 2011 às 10:55 pm #98488Fábio Prado
ParticipantePessoal,
Para quem quiser ou precisar utilizar CACHE em SEQUENCES, leia o artigo que escrevi em meu blog:
http://www.fabioprado.net/2010/09/cache … ences.html[]s
Fábio Prado
-
AutorPosts
- Você deve fazer login para responder a este tópico.