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

3 modi per restituire il numero di righe in ciascuna partizione in SQL Server (T-SQL)

Se in precedenza hai creato una tabella partizionata in SQL Server e ora vuoi sapere quante righe sono archiviate in ciascuna partizione, ecco tre query che puoi utilizzare.

In particolare, puoi:

  • Interroga il sys.dm_db_partition_stats visualizza
  • Esegui una query su sys.partitions visualizza
  • Usa il $PARTITION funzione in una query

Di seguito sono riportati esempi di tutti e tre.

sys.dm_db_partition_stats

Il sys.dm_db_partition_stats la visualizzazione a gestione dinamica del sistema restituisce le informazioni sul conteggio delle pagine e delle righe per ogni partizione nel database corrente.

Ecco un esempio di restituzione del conteggio delle righe di una tabella partizionata denominata Movies .

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

Risultato:

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

In questo caso, la prima e l'ultima partizione sono vuote (come consigliato da Microsoft).

sys.partitions

Il sys.partitions la vista del catalogo di sistema contiene una riga per ogni partizione di tutte le tabelle e la maggior parte dei tipi di indici nel database.

Ecco come possiamo usarlo per restituire gli stessi dati dell'esempio precedente.

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

Risultato:

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

Potresti notare che questo è quasi identico alla query precedente. L'unica differenza è che questo usa la colonna chiamata rows , mentre il precedente utilizzava una colonna chiamata row_count .

$PARTITIONS

Il $PARTITIONS funzione di sistema restituisce il numero di partizione in cui verrebbe mappato un insieme di valori di colonna di partizionamento per qualsiasi funzione di partizione specificata.

Possiamo quindi utilizzare queste informazioni per costruire una query che restituisca i dati del conteggio delle righe.

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

Risultato:

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

L'unica differenza con il risultato di questo esempio è che restituisce solo il conteggio delle righe non vuote.