SQL divisão / fusão de partições de tabela: Qual é a melhor abordagem para implementar?

StackOverflow https://stackoverflow.com/questions/160128

  •  03-07-2019
  •  | 
  •  

Pergunta

Microsoft em seu MSDN entrada sobre alterando o SQL 2005 partições, listadas algumas abordagens possíveis:

  • Criar uma nova tabela de partição com a função de partição desejado, e em seguida, insira os dados da tabela antiga para a nova tabela usando um INSERT INTO ... SELECT FROM comunicado.
  • Criar um índice agrupado particionado em um montão
  • Gota e reconstruir um índice particionado existente usando a Transact-SQL CREATE INDEX com a queda EXISTENTE = cláusula ON.
  • Executar uma seqüência de instruções ALTER PARTITION função.

Qualquer idéia do que vai ser a forma mais eficiente para um grande escala DB (milhões de registros) com partições com base nas datas dos registros (algo como partições mensais), onde os spreads de dados ao longo de 1-2 anos?

Além disso, se eu principalmente de acesso (para leitura) informações recentes, será que faz sentido manter uma partição para os últimos X dias, e todo o resto dos dados será outra partição? Ou é melhor para particionar o resto dos dados também (para qualquer acesso aleatório com base no período)?

Foi útil?

Solução

Eu recomendo a primeira abordagem - criar uma nova tabela de partição e inserindo nele - porque lhe dá o luxo de comparar as tabelas antigas e novas. Você pode testar os planos de consulta contra ambos os estilos de tabelas e ver se suas consultas são realmente mais rápida antes de cortar para o novo design da tabela. Você pode achar que não há melhoria, ou você pode querer experimentar várias funções de particionamento diferentes / esquemas antes de se estabelecer em seu resultado final. Você pode querer partição em algo diferente do intervalo de datas -. Data nem sempre é eficaz

Eu fiz particionamento com mesas linha 300-500m com disseminação de dados sobre 6-7 anos, e que a abordagem mesa-insert era o que eu achei mais útil.

Você perguntou sobre como partição - a melhor resposta é tentar projetar as partições para que suas consultas vai bater uma única partição. Se você tende a consultas concentrado em dados recentes, e se você filtro naquele campo de data na sua cláusula WHERE, então sim, ter uma partição separada para o maior número de dias recentes X.

Esteja ciente de que você tem que especificar o campo particionado em sua cláusula WHERE. Se você não está especificando que o campo, a consulta é provavelmente vai bater cada partição para obter os dados, e nesse ponto que você não terá quaisquer ganhos de desempenho.

Espero que ajude! Eu fiz um monte de particionamento, e se você quiser postar alguns exemplos de estruturas de tabelas e consultas, que vai ajudá-lo a obter uma resposta melhor para o seu ambiente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top