[转]T-SQL Optimization Tips (3): SELECT COUNT(*)

SELECT COUNT(*)需要进行全表扫描返回表的行数,对于数据规模非常大的表来说,这是非常耗时的操作。

如果需要获取一个表的所有行数,应当考虑从系统表sysindexes中获取的替代方案。

在查询分析器中执行如下语句:

 

1 SET STATISTICS IO ON
2 GO
3 SELECT COUNT(*FROM E1日销售明细
4 GO
5 SELECT rows FROM sysindexes WHERE id = OBJECT_ID('E1日销售明细'AND indid < 2
6 GO
7 SET STATISTICS IO OFF

 

返回的行数为13239473。

返回的消息显示——

(所影响的行数为 1 行)
表 'E1日销售明细'。扫描计数 68,逻辑读 51302 次,物理读 5 次,预读 49831 次。

(所影响的行数为 1 行)
表 'sysindexes'。扫描计数 1,逻辑读 2 次,物理读 0 次,预读 0 次。

 

DOS & DONTS——
4、避免使用SELECT COUNT(*);
[注意:为了引起注意,所有本系列总结的DOS & DONTS都是具有一定前提的,一般的前提是“除非必要”和“除非必要才不”。]

 

posted @ 2012-03-02 13:27  root7  阅读(142)  评论(0)    收藏  举报