Estou criando um banco de dados no qual haverá cerca de 30 tabelas, com cada tabela contendo dezenas de milhões de linhas e cada tabela contendo uma única coluna importante e uma coluna de chave primária/estrangeira para maximizar a eficiência da consulta em face de pesadas atualizações e inserções e fazem uso intenso de índices clusterizados. Duas das tabelas conterão dados textuais de comprimento variável, com uma delas contendo centenas de milhões de linhas, mas o restante conterá apenas dados numéricos.
Como eu realmente quero espremer até a última gota de desempenho do hardware que tenho disponível (cerca de 64 GB de RAM, um SSD muito rápido e 16 núcleos), pensei em permitir que cada mesa tenha seu próprio arquivo para que, não importa se Estou juntando em 2, 3, 4, 5 ou mais tabelas, cada tabela sempre será lida usando um thread separado e a estrutura de cada arquivo será alinhada com o conteúdo da tabela, o que, com sorte, minimizaria a fragmentação e a tornaria mais rápida para o SQL Server adicionar ao conteúdo de qualquer tabela.
Uma ressalva, estou preso no SQL Server 2008 R2 Web Edition . O que significa que não posso usar o particionamento horizontal automático, o que descarta isso como uma melhoria de desempenho.
O uso de um arquivo por tabela realmente maximizará o desempenho ou estou ignorando as características internas do mecanismo do SQL Server que tornariam isso redundante?
Em segundo lugar, se usar um arquivo por tabela é vantajoso, por que create table
só me dá a opção de alocar a tabela para um grupo de arquivos e não para um arquivo lógico específico? Isso exigiria que eu criasse um grupo de arquivos separado para cada arquivo em meu cenário, o que me sugere que talvez o SQL Server não esteja prevendo as vantagens que presumo viriam de fazer o que estou propondo.