När du skapar en partitionerad tabell i SQL Server anger du vilka värden som ska ingå i varje partition.
Detta görs när du skapar partitionsfunktionen. När du skapar partitionsfunktionen anger du gränsvärden, som bestämmer vilka värden som ingår i varje partition.
När du har skapat din partitionerade tabell och du har infogat data kan du köra en normal SELECT
uttalande för att returnera data, precis som du skulle göra med en icke-partitionerad tabell (faktiskt har även icke-partitionerade tabeller en partition).
Men visste du att du också kan ange vilken partition du vill ha data från?
Du kan göra detta med hjälp av $PARTITION
systemfunktion i din WHERE
klausul.
Exempel
Föreställ dig att vi har en partitionerad tabell som innehåller följande data:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-------------+
Och CatId
är partitioneringskolumnen.
Och vi använde följande partitionsfunktion för att skapa dess partitioner:
CREATE PARTITION FUNCTION CatsPartitionFunction (int)
AS RANGE LEFT FOR VALUES (-1, 5, 100);
Detta berättar för oss hur data lagras, enligt värdena i partitioneringskolumnen.
Så vi kan nu köra en fråga som bara returnerar data från en specifik partition.
Returnera data från den andra partitionen
Så här kan vi returnera alla rader från den andra partitionen.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 2;
Resultat:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | +---------+-------------+
Returnera data från den tredje partitionen
Och här är all data från den tredje partitionen.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 3;
Resultat:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-----------+
Returnera data från den första och sista partitionen
I det här fallet är min första partition tom, eftersom det inte finns några negativa värden i CatId
kolumn.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 1;
Resultat:
(0 rows affected)
På samma sätt är den sista partitionen tom, på grund av att det inte finns tillräckligt många rader för att fylla den partitionen.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 4;
Resultat:
(0 rows affected)
Detta följer Microsofts rekommendation att lämna de första och sista partitionerna tomma, för att undvika all dataförflyttning i händelse av att partitionerna delas eller slås samman i framtiden.