SQL 计算表中的行数

Posted

技术标签:

【中文标题】SQL 计算表中的行数【英文标题】:SQL count rows in a table 【发布时间】:2015-05-09 03:04:45 【问题描述】:

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

【问题讨论】:

这能回答你的问题吗? Fastest way to count exact number of rows in a very large table? 【参考方案1】:

是的,SELECT COUNT(*) FROM TableName

【讨论】:

选择每一列而不是单列不是计算量更大、效率更低吗??? 不,优化器足够聪明,可以识别这种情况并生成正确的执行计划。查一下,关于 SO 的问题有很多。 我有很多事情要做,因此很遗憾现在没有时间阅读它。但是,这将列在要做的事情列表中 这不是最好的答案,因为它会给生产系统带来不必要的锁和压力,尤其是对于大型表。使用 sys.partitions 直接从表元数据中返回确切的行数! 这对我来说失败了,因为我出于对聚合函数的习惯,加入了“GROUP BY”语句 - 不要那样做!【参考方案2】:
select sum([rows])
from sys.partitions
where object_id=object_id('tablename')
 and index_id in (0,1)

非常快,但很少不准确。

【讨论】:

我在一个有 400+ 百万行的表上运行了这个。超级快。 非常快 - 不到一秒,超过 17 亿行。谢谢! 这比 select count(*) from table 慢 这是一个元操作(这意味着它读取单个(或只是描述分区的所有行的总和,通常是 1 个条目),因此它几乎总是比读取 a 的每一行更快表。 这应该是最好的答案。我在几张不同大小的表上进行了基准标记,发现使用元数据查询与使用 SELECT(*) 一样快或明显快。【参考方案3】:

使用这个查询:

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

【讨论】:

【参考方案4】:

这里是查询

select count(*) from tablename

select count(rownum) from studennt

【讨论】:

【参考方案5】:

你为什么不右击表格然后属性 -> 存储,它会告诉你行数。 您可以将以下内容用于视图中的行数。在 WHERE 子句中使用表的名称。

SELECT SUM (row_count) 
FROM sys.dm_db_partition_stats 
WHERE object_id=OBJECT_ID('TableName')    
AND (index_id=0 or index_id=1)`

【讨论】:

benjamin 的回答中使用的“sys.dm_db_partition_stats”和“sys.partitions”有什么区别?【参考方案6】:

索引统计信息可能需要是最新的,但这将返回所有非 MS_SHIPPED 表的行数。

select o.name, i.rowcnt 
from sys.objects o join sys.sysindexes i 
on o.object_id = i.id
where o.is_ms_shipped = 0
and i.rowcnt > 0
order by o.name

【讨论】:

以上是关于SQL 计算表中的行数的主要内容,如果未能解决你的问题,请参考以下文章

如何加快计算 PostgreSQL 表中的行数?

jQuery:计算表中的行数

php 计算表中的行数

如何使用 PHP 获取 MySQL 表中的行数?

根据另一个表中的条件计算表中的行数

如何计算 MySQL 表中的行数(PHP PDO)