Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Zurückgeben aller Zeilen aus einer bestimmten Partition in SQL Server (T-SQL)

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.