返回列表 发帖

[求助] SQL海量数据查询分页问题,请教!

在网上找到份资料

最近有同事遇到sqlserver统计记百万条以上记录条数太慢的问题,sp经常会遇到统计大量数据问题,或许是巧合的原因,找到一个很简单的方法!

写了一篇文章

我们在统计记录的时候通常的做法是:select count(*) as c from table 。然而对于记录数巨大的表,上述做法将会非常耗时。在DELL 4400 服务器上做试验,MS Sqlserver 2000 数据库对于100万记录的简单数据表执行上述语句,时间在1分钟以上。如果在表的某个字段上做聚簇索引,第一次执行该语句的时间和没有索引的时间差不多,之后执行上述语句,速度很快,在1秒中以内,但当表的记录数发生较大变化后,再执行该语句又会经历一次耗时的过程。而且不是每个表都适合做聚簇索引的,对于数量巨大的表,如果需要经常增删操作,建聚簇索引是一个很不明智的做法,将会极大的影响增删的速度。那么有没有一个比较简单的方法快速获取表的记录总数呢?答案是有的。 在MS SQL 数据库中每个表都在sysindexes 系统表中拥有至少一条记录,该记录中的rows 字段会定时记录表的记录总数。下面是sysindexes 表的相关记录的含义:

列名 数据类型 描述id int 表ID(如果 indid = 0 或255)。否则为索引所属表的IDIndid smallint 索引ID: 0=表 1=聚簇索引 >1=非聚簇索引 255=具有text或image数据的表条目。rows int 基于indid=0 和 indid=1地数据级行数,该值对于indid>1重 复。如果indid=255,rows设置为0。 当表没有聚簇索引时,Indid = 0 否则为 1。



按这种方法建立索引,果然在sysindexs中找到这个记录,name=IX_Articles,rows=358989

这个rows就是记录数了。。。。

这样表中所有的数据记录数就出来了。。。

可是,如果我要加查询条件怎么办呢???

请教了!

[ 本帖最后由 chinanic 于 2007-9-5 08:39 编辑 ]
天行健,君子以自强不息
地势坤,君子以厚德载物
黑色海岸线欢迎您

QQ群:7212260
致力于探索WEB技术精髓:http://www.bitechcn.com
点这里加我!

最后的解决办法。。。。。就是木有办法。。。。第一次查询之后把总数放到URL的参数中。。。然后在页面中判断该参数是否为空。。不为空就不用再查询了。。。
天行健,君子以自强不息
地势坤,君子以厚德载物
黑色海岸线欢迎您

QQ群:7212260
致力于探索WEB技术精髓:http://www.bitechcn.com
点这里加我!

TOP

不懂,我们这个学期才开始学sql,但是,我会努力的~!

TOP

这仅是基于ASP的临时解决办法。。。。在下一次改版时。。。我会使用存储过程进行优化。。。。。。。。。靠靠的。。。真不是人干的活儿。。。。
天行健,君子以自强不息
地势坤,君子以厚德载物
黑色海岸线欢迎您

QQ群:7212260
致力于探索WEB技术精髓:http://www.bitechcn.com
点这里加我!

TOP

写存储过程 或者考虑在数据层上再搭建一个cache层 不过还仔细考虑数据的进出使用什么算法。
天行健,君子以自强不息
地势坤,君子以厚德载物
   黑色海岸线欢迎您

TOP

  风之子你能不能说浅点的。。。。

现在这ASP的站。。。存储过程用上意义也不是很大。。。。Cache。。用.NET开发的时候才能用上。。
天行健,君子以自强不息
地势坤,君子以厚德载物
黑色海岸线欢迎您

QQ群:7212260
致力于探索WEB技术精髓:http://www.bitechcn.com
点这里加我!

TOP

天,怎么学才能达到你们那个高度呢???

TOP

返回列表 回复 发帖