sql >> Databasteknik >  >> RDS >> Sqlserver

3 sätt att returnera antalet rader i varje partition i SQL Server (T-SQL)

Om du tidigare har skapat en partitionerad tabell i SQL Server och du nu vill veta hur många rader som lagras i varje partition, här är tre frågor du kan använda.

I synnerhet kan du:

  • Fråga sys.dm_db_partition_stats visa
  • Fråga sys.partitions visa
  • Använd $PARTITION funktion i en fråga

Nedan finns exempel på alla tre.

sys.dm_db_partition_stats

sys.dm_db_partition_stats Systemets dynamiska hanteringsvy returnerar sid- och radräkningsinformation för varje partition i den aktuella databasen.

Här är ett exempel på att returnera radantalet för en partitionerad tabell som heter 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 det här fallet är den första och sista partitionen tomma (som rekommenderas av Microsoft).

sys.partitions

sys.partitions systemkatalogvyn innehåller en rad för varje partition av alla tabeller och de flesta typer av index i databasen.

Så här kan vi använda det för att returnera samma data som i föregående exempel.

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 kanske märker att detta är nästan identiskt med den föregående frågan. Den enda skillnaden är att den här använder kolumnen som heter rows , medan den föregående använde en kolumn som heter row_count .

$PARTITIONS

$PARTITIONS systemfunktionen returnerar partitionsnumret till vilket en uppsättning partitioneringskolumnvärden skulle mappas för en specificerad partitionsfunktion.

Vi kan därför använda denna information för att konstruera en fråga som returnerar radräkningsdata.

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 enda skillnaden med resultatet av detta exempel är att det bara returnerar antalet rader som inte är tomma.


  1. Hur man får distinkta poster från en tabell i SQL Server - SQL Server / TSQL Tutorial 112

  2. psql:FATAL:databasen <användare> finns inte

  3. Bästa sättet att kontrollera om mysql_query gav några resultat?

  4. java.lang.ClassNotFoundException:org.postgresql.Driver