¿Cómo contar o saber el número de filas que tiene una tabla sin escanear toda la tabla, quizás usando ROW_NUMBER
?número de filas SQL Server
Respuesta
Si necesita un recuento exacto, tendrá que hacer un COUNT(*)
que escanear el índice agrupado.
Usted puede obtener un cálculo aproximado utilizando el esquema sys.partitions
, como se muestra aquí http://www.kodyaz.com/articles/sql-rowcount-using-sql-server-system-view-sys-partitions.aspx
Actualización: Para obtener el recuento en una variable:
DECLARE @cnt INT;
SELECT @cnt = SUM(rows)
FROM sys.partitions
WHERE
index_id IN (0, 1)
AND object_id = OBJECT_ID('MyDB.dbo.MyTable');
SELECT @cnt;
+1 La única respuesta hasta el momento para abordar la parte "sin explorar toda la tabla" de la pregunta. –
I rojo la información en el enlace, dice que es rápido utilizar la vista del sistema SQL Server (sys.partitions). ¿Sabes si supera el conteo de selecciones (*) de la tabla? Digamos una tabla con muchas filas (> 100,000,000)? – cMinor
@darkcminor: lo superará fácilmente, ya que solo tiene que recuperar un número de las tablas del sistema en lugar de escanear y contar 100 millones de filas. (probablemente x00,000 lecturas lógicas dependiendo de la cantidad de filas en una página) –
SELECT COUNT(*) FROM Table
devolverá el número de filas
Esto ** ** escaneará toda la tabla .... –
yo no cree que quiere decir esto, pero mal darle una oportunidad:
select count(*) from table
De nuevo: ** escaneará ** toda la tabla (no se recomienda para tablas con millones de filas ...) –
no hay ROW_NUMBER
en SQL Server, Oracle acaba. Uso:
SELECT COUNT(primary_key) FROM table
Dónde primary key
la columna de clave principal de la tabla.
Desde su clave primaria, su ya está indexada, por lo que SQL puede contar sin escanear toda la tabla (que utiliza un índice agrupado para ser precisos, que es mucho más rápido que un escaneo completo de tabla)
También podría usar el esquema sys.indexes
, pero no es exacto, y necesitaría privilegios de administrador de base de datos para acceder, y su base de datos de usuario no debe tener concesiones en ese esquema
COUNT (PK) es en realidad más lento que COUNT (*) – Simon
@simon Lo dudo mucho. ¿Puedes proporcionar un código de muestra donde sea más lento? –
@Simon: no veo por qué, dado que internamente SQL usa el índice de clave principal para contar las filas, se usa COUNT (*). Si se utiliza el mismo índice para ambos recuentos, el rendimiento debería ser bastante similar, si no es el mismo. – MestreLion
Un poco tarde para la fiesta aquí, pero en SQL Server 2005 en, también puede usar el procedimiento almacenado sp_spaceused
:
DECLARE @rowCount AS INT
DECLARE @spaceUsed TABLE(
[Name] varchar(64),
[Rows] INT,
[Reserved] VARCHAR(50),
[Data] VARCHAR(50),
[Index_Size] VARCHAR(50),
[Unused] VARCHAR(50)
)
INSERT INTO @spaceUsed EXEC sp_spaceused 'MyTableName'
SET @rowCount = (SELECT TOP 1 [Rows] FROM @spaceUsed)
SELECT @rowCount AS 'Row Count'
Me he acostumbrado a usar sp_spaceused
en lugar de porque es mucho más rápido. Sin embargo, lo más probable es que no sea tan preciso como COUNT (*).
- 1. Número de filas 'superpuestas' en SQL Server
- 2. sql server: El número estimado de filas está lejos
- 3. ¿Cómo funciona SQL Server el número estimado de filas?
- 4. promedio de filas agrupadas en SQL Server
- 5. Número de filas en Oracle SQL Select?
- 6. SQL DELETE - Número máximo de filas
- 7. Seleccionar n filas aleatorias de la tabla de SQL Server
- 8. Editar filas seleccionadas manualmente en SQL Server
- 9. Eliminar filas "duplicadas" en SQL Server 2010
- 10. número de puerto de SQL Server
- 11. Comodín de número en SQL Server
- 12. Eliminar un gran número de filas de SQL Server - de manera eficiente y sin bloqueo
- 13. Contando el número de filas eliminadas en un procedimiento almacenado de SQL Server
- 14. Recuperar un número diferente de filas para cada categoría desde la tabla de SQL Server
- 15. ¿Cómo obtener el número máximo de filas por grupo/partición en SQL Server?
- 16. Asigne a una variable el número de filas que tiene una tabla en SQL Server
- 17. SELECT COUNT (*) SQL SERVER
- 18. SQL Server devuelve la semana inesperada número
- 19. ¿Cómo detectar filas duplicadas en una tabla de SQL Server?
- 20. iterar a través de filas en SQL Server 2008
- 21. SQL Server: SUMA() de varias filas incluidos, en las cláusulas
- 22. Mover datos de SQL Server en fragmentos limitados (1000 filas)
- 23. Cómo comparo 2 filas de la misma tabla (SQL Server)
- 24. SQL Server Búsqueda de texto no encontrar mis filas
- 25. Sql Server 2008 Sintonización de grandes transacciones (700k + filas/transacción)
- 26. Número de filas afectadas por una ACTUALIZACIÓN en PL/SQL
- 27. Insertar varias filas en la tabla en SQL Server
- 28. SQL Server: cambiar la clave principal con filas relacionadas
- 29. Insertar varias filas en SQL Server desde Java
- 30. SQL Server 2005: Insertar varias filas con una sola consulta
que no quieres decir como select count (*) de la tabla ¿verdad? – CloudyMarble
recuento (clave principal) no escaneará toda la tabla, así que no tema usarla. Verifique mi respuesta para obtener información más detallada. – MestreLion
@MestreLion - ** escaneará ** toda la tabla. Con un IC, el nivel de hoja ** es ** la tabla. Necesita escanear las páginas de las hojas, ya que esta información no está disponible en los niveles superiores (las páginas de nivel intermedio solo tienen una tecla y un puntero por cada ** página ** en el nivel inferior, no tienen información sobre cuántas filas contiene cada página secundaria)) –