SQL Server
408
0

Contando registros de tus tablas de forma OPTIMA

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:

SQL
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

SQL
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

SQL
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

You must be logged in to post a comment.