Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

3 façons de renvoyer le nombre de lignes dans chaque partition dans SQL Server (T-SQL)

Si vous avez déjà créé une table partitionnée dans SQL Server et que vous souhaitez maintenant savoir combien de lignes sont stockées dans chaque partition, voici trois requêtes que vous pouvez utiliser.

Vous pouvez notamment :

  • Interroger sys.dm_db_partition_stats voir
  • Interroger les sys.partitions voir
  • Utilisez la $PARTITION fonction dans une requête

Vous trouverez ci-dessous des exemples des trois.

sys.dm_db_partition_stats

Les sys.dm_db_partition_stats La vue de gestion dynamique du système renvoie des informations sur le nombre de pages et de lignes pour chaque partition de la base de données actuelle.

Voici un exemple de renvoi du nombre de lignes d'une table partitionnée appelée Movies .

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

Résultat :

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

Dans ce cas, la première et la dernière partitions sont vides (comme recommandé par Microsoft).

sys.partitions

Les sys.partitions La vue du catalogue système contient une ligne pour chaque partition de toutes les tables et la plupart des types d'index de la base de données.

Voici comment nous pouvons l'utiliser pour renvoyer les mêmes données que dans l'exemple précédent.

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

Résultat :

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

Vous remarquerez peut-être que c'est presque identique à la requête précédente. La seule différence est que celui-ci utilise la colonne appelée rows , alors que le précédent utilisait une colonne appelée row_count .

$PARTITIONS

Les $PARTITIONS La fonction système renvoie le numéro de partition dans lequel un ensemble de valeurs de colonne de partitionnement serait mappé pour toute fonction de partition spécifiée.

Nous pouvons donc utiliser ces informations pour construire une requête qui renvoie des données de nombre de lignes.

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

Résultat :

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

La seule différence avec le résultat de cet exemple est qu'il ne renvoie que le nombre de lignes non vides.