sql >> Database >  >> RDS >> Sqlserver

3 manieren om het aantal rijen in elke partitie in SQL Server (T-SQL) te retourneren

Als u eerder een gepartitioneerde tabel in SQL Server hebt gemaakt en u wilt nu weten hoeveel rijen er in elke partitie worden opgeslagen, dan zijn hier drie query's die u kunt gebruiken.

U kunt in het bijzonder:

  • Bezoek de sys.dm_db_partition_stats bekijken
  • Bezoek de sys.partitions bekijken
  • Gebruik de $PARTITION functie in een zoekopdracht

Hieronder staan ​​voorbeelden van alle drie.

sys.dm_db_partition_stats

De sys.dm_db_partition_stats weergave dynamisch systeembeheer retourneert pagina- en rijtellingsinformatie voor elke partitie in de huidige database.

Hier is een voorbeeld van het retourneren van het aantal rijen van een gepartitioneerde tabel met de naam Movies .

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

Resultaat:

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

In dit geval zijn de eerste en laatste partities leeg (zoals aanbevolen door Microsoft).

sys.partitions

De sys.partitions systeemcatalogusweergave bevat een rij voor elke partitie van alle tabellen en de meeste typen indexen in de database.

Hier is hoe we het kunnen gebruiken om dezelfde gegevens als in het vorige voorbeeld te retourneren.

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

Resultaat:

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

U merkt misschien dat dit bijna identiek is aan de vorige zoekopdracht. Het enige verschil is dat deze de kolom gebruikt met de naam rows , terwijl de vorige een kolom gebruikte met de naam row_count .

$PARTITIONS

De $PARTITIONS systeemfunctie retourneert het partitienummer waarin een set partitiekolomwaarden zou worden toegewezen voor een opgegeven partitiefunctie.

We kunnen deze informatie daarom gebruiken om een ​​query te maken die gegevens over het aantal rijen retourneert.

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

Resultaat:

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

Het enige verschil met het resultaat van dit voorbeeld is dat het alleen het aantal niet-lege rijen retourneert.


  1. LogMiner gebruiken om huidige wijzigingen te vinden

  2. De beste ETL-tools voor migratie naar PostgreSQL

  3. COSH() Functie in Oracle

  4. Hoe de decoratie van de resultaatset in Psql-uitvoer te verbergen