15 enero 2013

Determinar cuantos registros tiene una tabla de SQL server

y ,de paso, como mejorar los tiempos de consulta.


Saber cuantos detalles se encuentran insertados en una tabla en SQL Server es una operación que hacemos por diferentes motivos, generar estadísticas para el usuario o hacer una validación, por ejemplo.

Hacer el conteo del total de registros de una tabla en especifico se puede hacer con la instrucción COUNT(*)

Ejemplo, dada una tabla con nombre registros lanzamos la consulta


SELECT COUNT(*) FROM dbo.registros


Esto nos retornara la cantidad de elementos, en este ejemplo 100,000 detalles















Hasta aquí todo es perfecto, sin embargo, como maniáticos de la mejora de nuestro sistema nos encontramos que este tipo de consultas es Lento con L mayúscula,  si estamos generando este tipo de consultas sobre tablas realmente grandes nos estaremos encontrando con que generamos una carga a nuestro motor de base de datos.

Entonces nos preguntamos, como agilizar esto?, pues si no necesitas el resultado exacto el 100 % del tiempo (bajo algunas circunstancias algo excepcionales puede diferir), nos aprovechamos de la tabla    sysindexes en donde se almacena la columna rows  con la cantidad de detalles, si hacemos las consultas:


SELECT COUNT(*) FROM dbo.registros

SELECT TOP 1 rows FROM sysindexes
INNER JOIN sys.sysobjects ON sys.sysindexes.id = sys.sysobjects.id
WHERE sys.sysobjects.xtype = 'U' AND sys.sysobjects.name = 'registros'
ORDER BY sysindexes.indid


Nos genera el mismo resultado:












Con una gran diferencia, si miramos el Execution plan de estas dos consultas los notamos




























95% contra el 5% del tiempo total de consulta, una gran diferencia que nos ayudara a acelerar nuestros procesos

Espero te sirva el  truco y te ayude en lo que estés desarrollando