SQL计算表中的行数

Fed*_*ece 22 sql-server rows count database-table

我需要向数据库发送一个SQL查询,告诉我表中有多少行.我可以使用SELECT获取表中的所有行,然后对它们进行计数,但我不喜欢这样做.是否有其他方法可以将表中的行数询问SQL服务器?

Cyb*_*ude 45

是, SELECT COUNT(*) FROM TableName

  • 这不是最好的答案,因为它会给生产系统带来不必要的锁定和压力,特别是对于大型表。使用 sys.partitions 直接从表元数据返回确切的行数! (8认同)
  • 我有很多事情要做,因此不幸的是现在没有时间阅读它。这将列在要做的事情清单上,但是 (3认同)
  • 选择每一列而不是单列会不会更计算密集和更低效??? (2认同)
  • 不,优化器足够聪明,可以识别这种情况并生成正确的执行计划。查一下,关于 SO 的主题有很多问题。 (2认同)
  • 这对我来说失败了,因为我出于使用聚合函数的习惯,加入了“GROUP BY”语句 - 不要这样做! (2认同)

Lov*_*uri 10

这是查询

select count(*) from tablename
Run Code Online (Sandbox Code Playgroud)

或者

select count(rownum) from student
Run Code Online (Sandbox Code Playgroud)


ben*_*its 9

select sum([rows])
from sys.partitions
where object_id=object_id('tablename')
 and index_id in (0,1)
Run Code Online (Sandbox Code Playgroud)

是非常快但很少不准确.

  • 我对一个有 400 多万行的表运行了这个。超级快。 (2认同)
  • 极快 - 不到一秒,超过 17 亿行。谢谢! (2认同)
  • 这应该是最好的答案。我在几个不同大小的表上对此进行了基准测试,发现使用元数据查询与使用“SELECT(*)”一样快或明显快。 (2认同)

Ard*_*oli 6

使用此查询:

Select
    S.name + '.' + T.name As TableName ,
    SUM( P.rows ) As RowCont 

From sys.tables As T
    Inner Join sys.partitions As P On ( P.OBJECT_ID = T.OBJECT_ID )
    Inner Join sys.schemas As S On ( T.schema_id = S.schema_id )
Where
    ( T.is_ms_shipped = 0 )
    AND 
    ( P.index_id IN (1,0) )
    And
    ( T.type = 'U' )

Group By S.name , T.name 

Order By SUM( P.rows ) Desc
Run Code Online (Sandbox Code Playgroud)


小智 6

为什么不右键单击表,然后单击属性-> 存储,它会告诉您行数。您可以在视图中使用下面的行数

SELECT SUM (row_count) 
FROM sys.dm_db_partition_stats 
WHERE object_id=OBJECT_ID('Transactions')    
AND (index_id=0 or index_id=1)`
Run Code Online (Sandbox Code Playgroud)