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

3 Möglichkeiten, die Anzahl der Zeilen in jeder Partition in SQL Server (T-SQL) zurückzugeben

Wenn Sie zuvor eine partitionierte Tabelle in SQL Server erstellt haben und nun wissen möchten, wie viele Zeilen in jeder Partition gespeichert werden, können Sie die folgenden drei Abfragen verwenden.

Insbesondere können Sie:

  • Fragen Sie sys.dm_db_partition_stats ab ansehen
  • Fragen Sie die sys.partitions ab ansehen
  • Verwenden Sie die $PARTITION Funktion in einer Abfrage

Nachfolgend finden Sie Beispiele für alle drei.

sys.dm_db_partition_stats

Die sys.dm_db_partition_stats System Dynamic Management View gibt Informationen zur Seiten- und Zeilenanzahl für jede Partition in der aktuellen Datenbank zurück.

Hier ist ein Beispiel für die Rückgabe der Zeilenanzahl einer partitionierten Tabelle namens Movies .

SELECT
    partition_number,
    row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Movies');

Ergebnis:

+--------------------+-------------+
| partition_number   | row_count   |
|--------------------+-------------|
| 1                  | 0           |
| 2                  | 100         |
| 3                  | 3979        |
| 4                  | 0           |
+--------------------+-------------+

In diesem Fall sind die erste und letzte Partition leer (wie von Microsoft empfohlen).

sys.partitions

Die sys.partitions Die Systemkatalogansicht enthält eine Zeile für jede Partition aller Tabellen und der meisten Arten von Indizes in der Datenbank.

So können wir damit die gleichen Daten wie im vorherigen Beispiel zurückgeben.

SELECT
    partition_number,
    rows
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');

Ergebnis:

+--------------------+--------+
| partition_number   | rows   |
|--------------------+--------|
| 1                  | 0      |
| 2                  | 100    |
| 3                  | 3979   |
| 4                  | 0      |
+--------------------+--------+

Sie werden vielleicht bemerken, dass dies fast identisch mit der vorherigen Abfrage ist. Der einzige Unterschied besteht darin, dass hier die Spalte namens rows verwendet wird , während die vorherige eine Spalte namens row_count verwendete .

$PARTITIONS

Die $PARTITIONS Die Systemfunktion gibt die Partitionsnummer zurück, in die ein Satz von Partitionierungsspaltenwerten für eine beliebige angegebene Partitionsfunktion abgebildet würde.

Wir können diese Informationen daher verwenden, um eine Abfrage zu erstellen, die Daten zur Zeilenanzahl zurückgibt.

SELECT 
    $PARTITION.MoviesPartitionFunction(MovieId) AS [Partition Number],   
    COUNT(*) AS [Number of Rows] 
FROM Movies   
GROUP BY $PARTITION.MoviesPartitionFunction(MovieId)
ORDER BY [Partition Number] ASC

Ergebnis:

+--------------------+------------------+
| Partition Number   | Number of Rows   |
|--------------------+------------------|
| 2                  | 100              |
| 3                  | 3979             |
+--------------------+------------------+

Der einzige Unterschied zum Ergebnis dieses Beispiels besteht darin, dass es nur die Anzahl nicht leerer Zeilen zurückgibt.