Wanneer u een gepartitioneerde tabel in SQL Server maakt, geeft u op welke waarden in elke partitie worden geplaatst.
Dit wordt gedaan wanneer u de partitiefunctie maakt. Wanneer u de partitiefunctie maakt, specificeert u grenswaarden, die bepalen welke waarden in elke partitie gaan.
Nadat u uw gepartitioneerde tabel hebt gemaakt en gegevens hebt ingevoegd, kunt u een normale SELECT
uitvoeren instructie om gegevens te retourneren, net zoals u zou doen met een niet-gepartitioneerde tabel (eigenlijk hebben zelfs niet-gepartitioneerde tabellen één partitie).
Maar wist u dat u ook kunt specificeren van welke partitie u gegevens wilt hebben?
U kunt dit doen met behulp van de $PARTITION
systeemfunctie in uw WHERE
clausule.
Voorbeeld
Stel je voor dat we een gepartitioneerde tabel hebben die de volgende gegevens bevat:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-------------+
En CatId
is de partitioneringskolom.
En we hebben de volgende partitiefunctie gebruikt om de partities te maken:
CREATE PARTITION FUNCTION CatsPartitionFunction (int)
AS RANGE LEFT FOR VALUES (-1, 5, 100);
Dit vertelt ons hoe de gegevens worden opgeslagen, volgens de waarden in de partitioneringskolom.
We kunnen nu dus een query uitvoeren die alleen gegevens van een specifieke partitie retourneert.
Gegevens van de tweede partitie retourneren
Hier is hoe we alle rijen van de tweede partitie kunnen retourneren.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 2;
Resultaat:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | +---------+-------------+
Gegevens van de derde partitie retourneren
En hier zijn alle gegevens van de derde partitie.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 3;
Resultaat:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-----------+
Gegevens retourneren van de eerste en laatste partities
In dit geval is mijn eerste partitie leeg, omdat er geen negatieve waarden zijn in de CatId
kolom.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 1;
Resultaat:
(0 rows affected)
Evenzo is de laatste partitie ook leeg, omdat er niet genoeg rijen zijn om die partitie te vullen.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 4;
Resultaat:
(0 rows affected)
Dit is in overeenstemming met de aanbeveling van Microsoft om de eerste en laatste partitie leeg te laten, om gegevensverplaatsing te voorkomen in het geval dat de partities in de toekomst worden gesplitst of samengevoegd.