sql >> Database teknologi >  >> RDS >> Sqlserver

3 måder at returnere antallet af rækker i hver partition i SQL Server (T-SQL)

Hvis du tidligere har oprettet en partitioneret tabel i SQL Server, og du nu vil vide, hvor mange rækker der er gemt i hver partition, er her tre forespørgsler, du kan bruge.

Du kan især:

  • Forespørg på sys.dm_db_partition_stats se
  • Forespørg på sys.partitions se
  • Brug $PARTITION funktion i en forespørgsel

Nedenfor er eksempler på alle tre.

sys.dm_db_partition_stats

sys.dm_db_partition_stats system dynamisk styringsvisning returnerer side- og rækkeantaloplysninger for hver partition i den aktuelle database.

Her er et eksempel på returnering af rækkeantallet af en opdelt tabel kaldet Movies .

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

Resultat:

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

I dette tilfælde er den første og sidste partition tomme (som anbefalet af Microsoft).

sys.partitions

sys.partitions systemkatalogvisningen indeholder en række for hver partition af alle tabellerne og de fleste typer indekser i databasen.

Her er, hvordan vi kan bruge det til at returnere de samme data som i det foregående eksempel.

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

Resultat:

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

Du vil måske bemærke, at dette næsten er identisk med den tidligere forespørgsel. Den eneste forskel er, at denne bruger kolonnen kaldet rows , hvorimod den forrige brugte en kolonne kaldet row_count .

$PARTITIONS

$PARTITIONS systemfunktionen returnerer det partitionsnummer, som et sæt af partitioneringskolonneværdier vil blive tilknyttet til en hvilken som helst specificeret partitionsfunktion.

Vi kan derfor bruge denne information til at konstruere en forespørgsel, der returnerer rækkeantaldata.

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

Resultat:

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

Den eneste forskel med resultatet af dette eksempel er, at det kun returnerer antallet af ikke-tomme rækker.


  1. Find og erstat hele mysql-databasen

  2. PostgreSQL - deaktivering af begrænsninger

  3. MySQL-ændringssamling af alle tabeller

  4. PostgreSQL-udløsere og grundlæggende funktioner i lagrede funktioner