none
tamanho de tabela RRS feed

  • Pergunta

  • preciso criar uma tabela onde terá  1(um)  milhão de registros por ano, minha pergunta é : si para cada ano faço uma nova tabela onde daria muito trabalho na programação ou não existe limite em uma tabela e sim criando os indices certo nao terei problemas futuros?

    segunda-feira, 18 de novembro de 2013 15:08

Respostas

  • Drauzio,

    Quando falamos de particionamento de tabelas, dados e índices temos alguns considerações:

    O particionamento facilita o gerenciamento de grandes tabelas ou índices, permitindo o acesso e o gerenciamento de subconjuntos de dados de forma rápida e eficaz, ao mesmo tempo em que mantém a integridade geral da coleção de dados.

    Com o particionamento, uma operação, como o carregamento de dados de um sistema OLTP para OLAP, leva apenas segundos em vez dos minutos ou horas necessários nas versões anteriores do SQL Server.

    As operações de manutenção realizadas nos subconjuntos de dados também são executadas com mais eficiência porque visam apenas aos dados necessários, em vez de toda a tabela.

    Os dados de tabelas e índices particionados são divididos em unidades que podem ser difundidas por mais de um grupo de arquivos em um banco de dados. Os dados são particionados horizontalmente, de forma que os grupos de linhas são mapeados em partições individuais.

    A tabela (ou índice) é tratada como uma única entidade lógica quando são executadas consultas ou atualizações nos dados.

    Todas as partições de um único índice ou de uma única tabela devem residir no mesmo banco de dados.


    Particionamento Horizontal de Tabelas

    O particionamento horizontal divide uma tabela em várias tabelas. Cada tabela contém o mesmo número de colunas, mas menos linhas.

    Por exemplo, uma tabela que contém 1 bilhão de linhas pode ser particionada horizontalmente em 12 tabelas, com cada tabela menor representando um mês de dados de um ano específico. Qualquer consulta, ao requerer dados de um mês específico, fará referência somente à tabela apropriada.

    Determinar como particionar as tabelas horizontalmente depende de como os dados são analisados. Você deve particionar as tabelas de forma que as consultas façam referência ao menor número possível de tabelas.

    Caso contrário, consultas UNION em excesso, usadas para mesclar as tabelas logicamente no momento da consulta, podem afetar o desempenho. Para obter mais informações sobre consultas em tabelas particionadas horizontalmente, consulte Cenários para usar exibições.

    Particionamento de dados horizontalmente com base em idade e uso é comum.

    Por exemplo, uma tabela pode conter dados dos últimos cinco anos, mas somente os dados do ano atual são acessados regularmente. Nesse caso, você pode considerar o particionamento dos dados em cinco tabelas, com cada tabela contendo dados somente de um ano.


    Particionamento Vertical de Tabelas

    O particionamento vertical divide uma tabela em várias tabelas que contêm menos colunas. Os dois tipos de particionamento vertical são a normalização e divisão de linhas:
    Normalização é o processo padrão do banco de dados para remover colunas redundantes de uma tabela e colocá-las em tabelas secundárias, vinculadas à tabela primária pela relação da chave primária e chave estrangeira.

    O particionamento de linhas divide a tabela original verticalmente em tabelas com menos colunas. Cada linha lógica em uma tabela dividida coincide com a mesma linha lógica das outras tabelas conforme é identificado por uma coluna UNIQUE KEY idêntica, em todas as tabelas particionadas.
    Por exemplo, a junção da linha com ID 712 de cada tabela dividida recria a linha original.

    Como o particionamento horizontal, a divisão vertical deixa as consultas digitalizarem menos dados. Isso aumenta o desempenho de consulta.

    Por exemplo, uma tabela que contém sete colunas das quais somente as quatro primeiras são geralmente referenciadas, pode se beneficiar da divisão das três últimas colunas em uma tabela separada.

    O particionamento vertical deve ser considerado com cautela, porque a análise de dados de várias partições requer consultas que unem as tabelas. O particionamento vertical também pode comprometer o desempenho, se as partições forem muito grandes.

     


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Sugerido como Resposta Jean Carlos Galhardi sábado, 23 de novembro de 2013 11:44
    • Marcado como Resposta Giovani Cr terça-feira, 26 de novembro de 2013 14:48
    sexta-feira, 22 de novembro de 2013 23:28

Todas as Respostas

  • Drauzio,

    Se sua tabela for criada utilizando os índices corretamente, realizando planos de manutenção periódicos e consultas bem otimizadas, não vejo nenhum problema em criar apenas 1 tabela.

    Apenas verifique se seu servidor onde o BD irá rodar tem uma configuração adequada para sua necessidade.

    Abraço!


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    segunda-feira, 18 de novembro de 2013 15:18
  • O fato da sua tabela possuir os indices não implica necessariamente em não ter problemas futuros.

    Tamanho de tabelas em banco pode se tornar um problema quando voce começa a pensar em tempo de resposta das consultas, IO, etc...

    Esta é uma decisão que, se possível, deve envolver o DBA do seu projeto, caso tenha um. Se esta for uma decisão sua, voce deve considerar os prós e os contras.

    Em minha opinião, 1 milhão de registros para SGBDs como Oracle e SQL Server, não é um volume grande a ponto de causar problemas. Se voce começa a pensar em 10, 20 e por ai vai, isso ja começa a ficar mais complicado.

    A quem diga que tudo em uma tabela única é o melhor. Outros vão defender várias tabelas.

    Se voce optar por várias tabelas, não vejo problemas para o seu código. Se voce pensar em um esquema onde o nome da tabela seja concatenado com ano, tipo Tabela_Ano (Tabela_2013, Tabela_2014, etc..), voce resolve isso fácil em seu código. Até porque os nomes das colunas da tabela não irão mudar, apenas o nome da tabela.

    Com relação a pesquisas nas outras tabelas também não daria muito problema. Voce pode criar Procedures que fazem a busca em cima de Views. Assim, sempre que voce precisar pesquisar a tabela, voce faria o Select na View e dentro da View voce tem os Joins com as tabelas.

    Abraços,



    Washington Luíz | MCP, MCTS
    O Senhor é minha força e somente Nele confio.

    segunda-feira, 18 de novembro de 2013 15:21
  • Boa tarde Drauzio,

    Além da dica do Kanaãn, e caso voce esteja usando uma versão Enterprise do SQL Server, voce poderá utilizar os recursos do Particionamento de tabelas e indices, que poderá facilitar a administração e ajudar na performance.

    At.
    Rafael

    segunda-feira, 18 de novembro de 2013 15:27
  • Drauzio,

    Quando falamos de particionamento de tabelas, dados e índices temos alguns considerações:

    O particionamento facilita o gerenciamento de grandes tabelas ou índices, permitindo o acesso e o gerenciamento de subconjuntos de dados de forma rápida e eficaz, ao mesmo tempo em que mantém a integridade geral da coleção de dados.

    Com o particionamento, uma operação, como o carregamento de dados de um sistema OLTP para OLAP, leva apenas segundos em vez dos minutos ou horas necessários nas versões anteriores do SQL Server.

    As operações de manutenção realizadas nos subconjuntos de dados também são executadas com mais eficiência porque visam apenas aos dados necessários, em vez de toda a tabela.

    Os dados de tabelas e índices particionados são divididos em unidades que podem ser difundidas por mais de um grupo de arquivos em um banco de dados. Os dados são particionados horizontalmente, de forma que os grupos de linhas são mapeados em partições individuais.

    A tabela (ou índice) é tratada como uma única entidade lógica quando são executadas consultas ou atualizações nos dados.

    Todas as partições de um único índice ou de uma única tabela devem residir no mesmo banco de dados.


    Particionamento Horizontal de Tabelas

    O particionamento horizontal divide uma tabela em várias tabelas. Cada tabela contém o mesmo número de colunas, mas menos linhas.

    Por exemplo, uma tabela que contém 1 bilhão de linhas pode ser particionada horizontalmente em 12 tabelas, com cada tabela menor representando um mês de dados de um ano específico. Qualquer consulta, ao requerer dados de um mês específico, fará referência somente à tabela apropriada.

    Determinar como particionar as tabelas horizontalmente depende de como os dados são analisados. Você deve particionar as tabelas de forma que as consultas façam referência ao menor número possível de tabelas.

    Caso contrário, consultas UNION em excesso, usadas para mesclar as tabelas logicamente no momento da consulta, podem afetar o desempenho. Para obter mais informações sobre consultas em tabelas particionadas horizontalmente, consulte Cenários para usar exibições.

    Particionamento de dados horizontalmente com base em idade e uso é comum.

    Por exemplo, uma tabela pode conter dados dos últimos cinco anos, mas somente os dados do ano atual são acessados regularmente. Nesse caso, você pode considerar o particionamento dos dados em cinco tabelas, com cada tabela contendo dados somente de um ano.


    Particionamento Vertical de Tabelas

    O particionamento vertical divide uma tabela em várias tabelas que contêm menos colunas. Os dois tipos de particionamento vertical são a normalização e divisão de linhas:
    Normalização é o processo padrão do banco de dados para remover colunas redundantes de uma tabela e colocá-las em tabelas secundárias, vinculadas à tabela primária pela relação da chave primária e chave estrangeira.

    O particionamento de linhas divide a tabela original verticalmente em tabelas com menos colunas. Cada linha lógica em uma tabela dividida coincide com a mesma linha lógica das outras tabelas conforme é identificado por uma coluna UNIQUE KEY idêntica, em todas as tabelas particionadas.
    Por exemplo, a junção da linha com ID 712 de cada tabela dividida recria a linha original.

    Como o particionamento horizontal, a divisão vertical deixa as consultas digitalizarem menos dados. Isso aumenta o desempenho de consulta.

    Por exemplo, uma tabela que contém sete colunas das quais somente as quatro primeiras são geralmente referenciadas, pode se beneficiar da divisão das três últimas colunas em uma tabela separada.

    O particionamento vertical deve ser considerado com cautela, porque a análise de dados de várias partições requer consultas que unem as tabelas. O particionamento vertical também pode comprometer o desempenho, se as partições forem muito grandes.

     


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Sugerido como Resposta Jean Carlos Galhardi sábado, 23 de novembro de 2013 11:44
    • Marcado como Resposta Giovani Cr terça-feira, 26 de novembro de 2013 14:48
    sexta-feira, 22 de novembro de 2013 23:28