sql如何最快地返回上千万的总记录数?

求助:
SQL查询出的记录集中,要统计记录的总条数的好办法。要求速度和占有最少资源的方式。
已经知道的方法有:
1、select count(item) as num from table
2、select item from table后,用recordset.recordcount
但是用这两个方法,在大量数据的时候,会出现速度很慢和占用大量CUP资源及内存的问题。就是要大量计算很慢。
有没人知道能够直接通过第一条记录和最后一条记录的记录条数差的办法来写的程序啊?

第一种方法:select * from 表
select @@rowcount as '记录数' -----@@rowcount返回select * from 表 中数据行的数目.

第二种方法:1.在表中加一identity属性列,每增加一条记录,该列值自动加1

最后一条记录的identity属性列值就是总条数

2.最后查询表中最后一条记录的identity属性列的列值就可以知道总条数了.
语句为:
select top 1 identity属性列 from 表 order by identity属性列 desc
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-06-20

两种情况:

1、表格的总记录数,使用系统表格sysindexes,sysobjects联合查询:

select rowcnt from sysindexes where 
id in (select id from sysobjects where name ='表格名称')
and status=0

2、检索结果的总记录数,使用 count()来计算:

select count(*) from table where id> 1000

第2个回答  2010-06-06
select count(*) as num from table
我公司的业务软件,用的是Oracle的数据库,我用以上语句查询一个四百多万行记录的表仅仅零点几秒,还不到一秒,没有你说的那样速度慢啊

在Sqlserver里边查询200多万行记录的表也是不到1秒,这个速度是完全可以满足要求的
第3个回答  2010-06-06
统计总数不涉及全表扫描,所以不会占用很多资源,你可以做个跟踪执行计划,对比分析资源占用的原因

数据库记录号是逻辑记录号的概念,通过记录号差的办法和第一种方法性能没有差异,因为最后一条号需要max(号)这样的方法得到
第4个回答  2010-06-06
select rowcnt from sysindexes where id=object_id('表名')

应该快很多本回答被提问者和网友采纳
相似回答