Når du opretter en partitioneret tabel i SQL Server, angiver du, hvilke værdier der skal ind i hver partition.
Dette gøres, når du opretter partitionsfunktionen. Når du opretter partitionsfunktionen, angiver du grænseværdier, som bestemmer, hvilke værdier der går ind i hver partition.
Når du har oprettet din opdelte tabel, og du har indsat data, kan du køre en normal SELECT
sætning for at returnere data, ligesom du ville gøre med en ikke-opdelt tabel (faktisk har selv ikke-opdelte tabeller én partition).
Men vidste du, at du også kan angive, hvilken partition du vil have data fra?
Du kan gøre dette ved hjælp af $PARTITION
systemfunktion i din WHERE
klausul.
Eksempel
Forestil dig, at vi har en opdelt tabel, der indeholder følgende data:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-------------+
Og CatId
er partitioneringskolonnen.
Og vi brugte følgende partitionsfunktion til at oprette dens partitioner:
CREATE PARTITION FUNCTION CatsPartitionFunction (int)
AS RANGE LEFT FOR VALUES (-1, 5, 100);
Dette fortæller os, hvordan dataene er lagret i henhold til værdierne i partitioneringskolonnen.
Så vi kan nu køre en forespørgsel, der kun returnerer data fra en bestemt partition.
Returner data fra den anden partition
Sådan kan vi returnere alle rækker fra den anden partition.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 2;
Resultat:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | +---------+-------------+
Returner data fra den tredje partition
Og her er alle data fra den tredje partition.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 3;
Resultat:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-----------+
Returner data fra den første og sidste partition
I dette tilfælde er min første partition tom, fordi der ikke er nogen negative værdier i CatId
kolonne.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 1;
Resultat:
(0 rows affected)
På samme måde er den sidste partition også tom, fordi der ikke er nok rækker til at udfylde den partition.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 4;
Resultat:
(0 rows affected)
Dette overholder Microsofts anbefaling om at lade den første og sidste partition være tomme for at undgå enhver dataflytning i tilfælde af, at partitionerne opdeles eller flettes i fremtiden.