Contar el total de registros de una tabla es algo bastante frecuente en nuestra tarea diaria como programadores o DBA SQL.
Ahora bien, ¿ lo estaremos haciendo de forma eficiente? Pues aquí en este post te voy a mostrar distintas alternativas y compararemos su rendimiento.
En mi ejemplo estoy usando la base de datos StackOverflow
Ejemplo clásico usando COUNT
Este primer ejemplo es el mas común que usamos:
USE STACKOVERFLOW2010
GO
SELECT COUNT(*) FROM DBO.POSTS ;
Veamos su plan de ejecución y costos

Costo: 7,27
CPU Time: 422 ms
Tiempo: 92ms
Usando la vista SYS.PARTITIONS
Sys.Partitions es una vista SQL la cual contiene información relacionada a la cantidad de registros, compression y demás por cada tabla y/o partición de la misma.
Usemos entonces esa vista para ver que cantidad de registros tiene la tabla dbo.post y comparemos su costo
SELECT SUM([ROWS]) FROM SYS.PARTITIONS
WHERE [OBJECT_ID] = OBJECT_ID(N'DBO.POSTS')
AND INDEX_ID IN (0,1);

Costo: 0.014
CPU Time: 0ms
Tiempo: 16ms
Aquí podemos observar una mejora SUSTANCIAL en el rendimiento para hacer la misma consulta.
Obtener el total de registros para todas las tablas
Si deseamos ahora obtener una consulta que nos retorne el total de registros para todas nuestras tablas entonces podríamos usar el siguiente código
SELECT SCHEMA_NAME(T.SCHEMA_ID) AS ESQUEMA,
T.NAME AS TABLA,
SUM([ROWS]) AS CANTIDAD_ROWS
,
P.DATA_COMPRESSION_DESC
FROM SYS.PARTITIONS P
INNER JOIN SYS.TABLES T
ON P.OBJECT_ID = T.OBJECT_ID
WHERE INDEX_ID IN (0,1)
GROUP BY T.SCHEMA_ID,T.NAME, P.DATA_COMPRESSION_DESC
ORDER BY 3 DESC

Conclusiones
Si necesitas saber el total de registros que tiene una o mas de una tabla NO uses el COUNT y en su lugar utiliza la vista sys.partitions
Si te interesan estos temas de optimización en SQL te invito a conocer mi curso sobre el tema