Podczas tworzenia tabeli partycjonowanej w programie SQL Server określasz, które wartości trafiają do każdej partycji.
Odbywa się to podczas tworzenia funkcji partycji. Podczas tworzenia funkcji partycji określasz wartości graniczne, które określają, które wartości trafiają do każdej partycji.
Po utworzeniu tabeli partycjonowanej i wstawieniu danych możesz uruchomić normalny SELECT
instrukcja zwracania danych, tak jak w przypadku tabeli niepartycjonowanej (w rzeczywistości nawet tabele niepartycjonowane mają jedną partycję).
Ale czy wiesz, że możesz również określić, z której partycji chcesz pobrać dane?
Możesz to zrobić za pomocą $PARTITION
funkcja systemowa w Twoim WHERE
klauzula.
Przykład
Wyobraź sobie, że mamy podzieloną na partycje tabelę zawierającą następujące dane:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-------------+
I CatId
to kolumna partycjonująca.
I użyliśmy następującej funkcji partycji, aby utworzyć jej partycje:
CREATE PARTITION FUNCTION CatsPartitionFunction (int)
AS RANGE LEFT FOR VALUES (-1, 5, 100);
To mówi nam, jak dane są przechowywane, zgodnie z wartościami w kolumnie partycjonowania.
Możemy więc teraz uruchomić zapytanie, które zwraca tylko dane z określonej partycji.
Zwróć dane z drugiej partycji
Oto jak możemy zwrócić wszystkie wiersze z drugiej partycji.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 2;
Wynik:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | +---------+-------------+
Zwróć dane z trzeciej partycji
A oto wszystkie dane z trzeciej partycji.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 3;
Wynik:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-----------+
Zwróć dane z pierwszej i ostatniej partycji
W tym przypadku moja pierwsza partycja jest pusta, ponieważ w CatId
nie ma wartości ujemnych kolumna.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 1;
Wynik:
(0 rows affected)
Podobnie ostatnia partycja jest również pusta, ponieważ nie ma wystarczającej liczby wierszy do wypełnienia tej partycji.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 4;
Wynik:
(0 rows affected)
Jest to zgodne z zaleceniem Microsoftu, aby pozostawić pierwszą i ostatnią partycję pustą, aby uniknąć jakiegokolwiek przenoszenia danych w przypadku podziału lub połączenia partycji w przyszłości.