Wenn Sie eine partitionierte Tabelle in SQL Server erstellen, geben Sie an, welche Werte in die einzelnen Partitionen aufgenommen werden.
Dies geschieht, wenn Sie die Partitionsfunktion erstellen. Wenn Sie die Partitionsfunktion erstellen, geben Sie Grenzwerte an, die bestimmen, welche Werte in die einzelnen Partitionen eingehen.
Nachdem Sie Ihre partitionierte Tabelle erstellt und Daten eingefügt haben, können Sie ein normales SELECT
ausführen -Anweisung, um Daten zurückzugeben, genauso wie Sie es mit einer nicht partitionierten Tabelle tun würden (eigentlich haben sogar nicht partitionierte Tabellen eine Partition).
Aber wussten Sie, dass Sie auch angeben können, von welcher Partition Sie Daten erhalten möchten?
Sie können dies mit Hilfe von $PARTITION
tun Systemfunktion in Ihrem WHERE
Klausel.
Beispiel
Stellen Sie sich vor, wir haben eine partitionierte Tabelle, die die folgenden Daten enthält:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-------------+
Und CatId
ist die Partitionierungsspalte.
Und wir haben die folgende Partitionsfunktion verwendet, um ihre Partitionen zu erstellen:
CREATE PARTITION FUNCTION CatsPartitionFunction (int)
AS RANGE LEFT FOR VALUES (-1, 5, 100);
Dies sagt uns, wie die Daten gemäß den Werten in der Partitionierungsspalte gespeichert werden.
Daher können wir jetzt eine Abfrage ausführen, die nur Daten von einer bestimmten Partition zurückgibt.
Daten von der zweiten Partition zurückgeben
So können wir alle Zeilen aus der zweiten Partition zurückgeben.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 2;
Ergebnis:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | +---------+-------------+
Daten von der dritten Partition zurückgeben
Und hier sind alle Daten der dritten Partition.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 3;
Ergebnis:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-----------+
Daten von der ersten und letzten Partition zurückgeben
In diesem Fall ist meine erste Partition leer, weil es keine negativen Werte in der CatId
gibt Säule.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 1;
Ergebnis:
(0 rows affected)
In ähnlicher Weise ist auch die letzte Partition leer, da nicht genügend Zeilen vorhanden sind, um diese Partition zu füllen.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 4;
Ergebnis:
(0 rows affected)
Dies entspricht der Empfehlung von Microsoft, die erste und letzte Partition leer zu lassen, um Datenbewegungen zu vermeiden, falls die Partitionen in Zukunft geteilt oder zusammengeführt werden.