Ao criar uma tabela particionada no SQL Server, você especifica quais valores vão para cada partição.
Isso é feito quando você cria a função de partição. Ao criar a função de partição, você especifica valores de limite, que determinam quais valores entram em cada partição.
Depois de criar sua tabela particionada e inserir dados, você pode executar um
SELECT
normal para retornar dados, assim como você faria com uma tabela não particionada (na verdade, mesmo tabelas não particionadas têm uma partição). Mas você sabia que também pode especificar de qual partição deseja dados?
Você pode fazer isso com a ajuda do
$PARTITION
função do sistema em seu WHERE
cláusula. Exemplo
Imagine que temos uma tabela particionada que contém os seguintes dados:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-------------+
E
CatId
é a coluna de particionamento. E usamos a seguinte função de partição para criar suas partições:
CREATE PARTITION FUNCTION CatsPartitionFunction (int)
AS RANGE LEFT FOR VALUES (-1, 5, 100);
Isso nos diz como os dados são armazenados, de acordo com os valores na coluna de particionamento.
Portanto, agora podemos executar uma consulta que retorna apenas dados de uma partição específica.
Dados de retorno da segunda partição
Veja como podemos retornar todas as linhas da segunda partição.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 2;
Resultado:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | +---------+-------------+
Dados de retorno da terceira partição
E aqui estão todos os dados da terceira partição.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 3;
Resultado:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-----------+
Dados de retorno da primeira e última partições
Nesse caso, minha primeira partição está vazia, pois não há valores negativos no
CatId
coluna. SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 1;
Resultado:
(0 rows affected)
Da mesma forma, a última partição também está vazia, pois não há linhas suficientes para preencher essa partição.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 4;
Resultado:
(0 rows affected)
Isso segue a recomendação da Microsoft de deixar a primeira e a última partições vazias, a fim de evitar qualquer movimentação de dados no caso de as partições serem divididas ou mescladas no futuro.