Pular para o conteúdo
  • Este tópico contém 6 respostas, 4 vozes e foi atualizado pela última vez 15 anos atrás por Fábio Prado.
Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Autor
    Posts
  • #98417
    caiocs0603
    Participante

      Olá 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?

      #98418
      Peterson
      Participante

        Você 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.

        #98419
        burga
        Participante

          O 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…

          #98420
          Peterson
          Participante

            Recomendo que configure um valor legal para o cache da sequence, já que ela será muito utilizada (várias tabelas simultâneamente).

            #98445
            caiocs0603
            Participante

              mister peterson, poderia explicar melhor essa história de cache q vc falow, e obrigado ae, vc e o burga

              #98446
              burga
              Participante

                No 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…

                #98488
                Fábio Prado
                Participante

                  Pessoal,

                  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

                Visualizando 7 posts - 1 até 7 (de 7 do total)
                • Você deve fazer login para responder a este tópico.