sql >> Base de Datos >  >> RDS >> Sqlserver

3 formas de devolver el número de filas en cada partición en SQL Server (T-SQL)

Si anteriormente creó una tabla particionada en SQL Server y ahora quiere saber cuántas filas se almacenan en cada partición, aquí hay tres consultas que puede usar.

En particular, puede:

  • Consulta sys.dm_db_partition_stats ver
  • Consulta las sys.partitions ver
  • Utilice la $PARTITION función en una consulta

A continuación se muestran ejemplos de los tres.

sys.dm_db_partition_stats

El sys.dm_db_partition_stats La vista de administración dinámica del sistema devuelve información de recuento de filas y páginas para cada partición en la base de datos actual.

Aquí hay un ejemplo de devolver el recuento de filas de una tabla particionada llamada Movies .

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

Resultado:

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

En este caso, la primera y la última partición están vacías (como recomienda Microsoft).

sys.partitions

Las sys.partitions La vista de catálogo del sistema contiene una fila para cada partición de todas las tablas y la mayoría de los tipos de índices de la base de datos.

Así es como podemos usarlo para devolver los mismos datos que en el ejemplo anterior.

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

Resultado:

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

Puede notar que esto es casi idéntico a la consulta anterior. La única diferencia es que este usa la columna llamada rows , mientras que el anterior usaba una columna llamada row_count .

$PARTITIONS

Las $PARTITIONS La función del sistema devuelve el número de partición en el que se asignaría un conjunto de valores de columna de partición para cualquier función de partición especificada.

Por lo tanto, podemos usar esta información para construir una consulta que devuelva datos de conteo de filas.

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

Resultado:

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

La única diferencia con el resultado de este ejemplo es que solo devuelve el recuento de filas no vacías.