Usuário com melhor resposta
Particionamento de tabela

Pergunta
-
Galera,
tenho uma tabela com as seguintes caracteristicas:
TESTE
ID | Vencimento
criei um 5 particionamentos de arquivos
Antes_2005, 2006,2007, 2008 e 2009
ao criar a tebla associe ela aos SCHEME que está associado aos meus particionamentos da seguinte forma:
CREATE PATITION FUNCTION PF_VENCIMENTOS (DATETIME)
AS RANGE RIGHT
FOR VALUES('01/01/2005','01/01/2006','01/01/2007','01/01/2008')
GO
CREATE PARTITION SCHEME PS_VENCIMENTOS AS PARTITION PF_VENCIMENTOS
TO (FileGrupo2005,FileGrupo2006,FileGrupo2007,FileGrupo2008,FileGrupo2009)
go
CREATE TABLE TESTE
(ID INT NOT NULL,
VECIMENTO DATETIME) ON PS_VENCIMENTOS(VENCIMENTO)
--Se eu faço uma carga nesta tabela ele distribui certinho os vencimentos aos seus Ranger de particionamento porém...
--AQUI ESTA MEU PROBLEMA:
Quando for criar o PK para ID eu tenho que falar em que filegrup ela vai ficar, se eu falo que a PK ficará na partição primária ele carrega toda a tabela para o File grup primário, não respeitando meu range particionamento .
Como faço para o PK ir junto com meus particionamentos?
Marcos
Respostas
-
Olá Marquinhos44,
Toda tabela será HEAP ou será Clustered. Se houver um índice clustered, a tabela estará clusterizada e se não houver a tabela será uma Heap Table. Você pode particionar tanto HEAP TABLEs quando Clustered Tables, mas a partir do momento em que aparece uma chave primária, ou a tabela utiliza a chave primária (ou alguma das colunas participantes) para particionar, ou será necessário criar um índice unique clustered para assegurar que a tabela esteja particionada (o que normalmente é feito quando não se deseja particionar pela chave primária).
[ ]s,Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.com/blogPiores Práticas – Elaborar triggers preparadas para linhas e não para conjuntos
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!937.entry
Classifique as respostas. O seu feedback é imprescindível- Marcado como Resposta Marquinhos Oliveira sexta-feira, 5 de fevereiro de 2010 16:44
Todas as Respostas
-
Bom Dia,
Altere o final do seu script para
CREATE TABLE TESTE (ID INT NOT NULL, VECIMENTO DATETIME, CONSTRAINT PK_TESTE PRIMARY KEY (ID) NONCLUSTERED) ON PRIMARY CREATE CLUSTERED INDEX IX ON TESTE (VENCIMENTO, ID) ON PS_VENCIMENTOS(VENCIMENTO)
Ainda assim não sei se essa é a melhor solução, pois, clusterizar o vencimento pode levar a fragmentação. Os INSERTs irão ocorrer por ordem de vencimento ?
[ ]s,Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.com/blogPiores Práticas – Elaborar triggers preparadas para linhas e não para conjuntos
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!937.entry
Classifique as respostas. O seu feedback é imprescindível -
-
Olá Marquinhos44,
Toda tabela será HEAP ou será Clustered. Se houver um índice clustered, a tabela estará clusterizada e se não houver a tabela será uma Heap Table. Você pode particionar tanto HEAP TABLEs quando Clustered Tables, mas a partir do momento em que aparece uma chave primária, ou a tabela utiliza a chave primária (ou alguma das colunas participantes) para particionar, ou será necessário criar um índice unique clustered para assegurar que a tabela esteja particionada (o que normalmente é feito quando não se deseja particionar pela chave primária).
[ ]s,Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.com/blogPiores Práticas – Elaborar triggers preparadas para linhas e não para conjuntos
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!937.entry
Classifique as respostas. O seu feedback é imprescindível- Marcado como Resposta Marquinhos Oliveira sexta-feira, 5 de fevereiro de 2010 16:44
-
-
Gustavo,
veja se meu entendimento está certo:
como um indice clustered está junto com a página de dados, não teria como eu particionar a tabela a não ser que meu ranger fosse meu proprio indice clusterd, neste caso então crio uma tabela HEAP que são aquelas que nao tem indice clustered, pois os indices nao ficam na página de dados, podendo assim particionar a tabela por onde eu bem quiser.
estou certo?
Marcos -
Marquinhos,
Quando criamos um índice não somos obrigados a utilizar o índice no mesmo filegroup que esta sendo utilizado pela tabela.
A página de dados parte a tabela o índice possui sua área de alocação de dados.
Como você esta querendo realizar o particionamento dos dados, você deverá especificar um range para seu particionamento sendo este range armazenado dentro de um filegroup que pode ou ser o mesmo do índice.
Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA