对SQL服务器(2005)表计数行?

时间:2010-05-11 17:03:38

标签: sql-server-2005 visual-studio-2005

我有一个简单的问题,有两个选项来获取SQL服务器中的行数(2005)。我正在使用VS 2005.有两种方法可以计算:

SELECT id FROM Table1 WHERE dt >= startDt AND dt < endDt;;

我从缓存中的上面调用中得到一个id列表,然后我按List.Count计算。另一种选择是

SELECT COUNT(*) FROM Table1 WHERE dt >= startDt AND dt < endDt;

以上通话将直接获得计数。问题是我在第二种方法中遇到了几种例外情况:超时。我发现table1太大了,有数百万的数据。当我使用第一个选项时,似乎没问题。

我对Count()比获取所有行所花费的时间更多感到困惑(是真的吗?)。不确定使用Count()的聚合调用是否会导致SQL服务器在服务器端创建临时表或缓存,并且当表太大时会导致性能降低?我不确定获得点数的最佳方式是什么?

4 个答案:

答案 0 :(得分:1)

您应该在dt列上add an index ,然后它应该非常快。

CREATE INDEX ix_Table1_dt ON Table1 (dt)

如果你有很多行(我假设你这样做),创建索引可能需要很长时间。

答案 1 :(得分:1)

将索引放在dt字段上并使用COUNT(id)(假设id设置为NOT NULL)

SELECT COUNT(id) FROM Table1 WHERE dt >= startDt AND dt < endDt;

另外,COUNT(id) vs COUNT(*)在您的情况下并不重要。

答案 2 :(得分:1)

执行此操作时会发生什么

SELECT COUNT(id) FROM Table1 WHERE dt >= startDt AND dt < endDt;

请记住,当COUNT(*)执行

时,COUNT(id)不计算NULLS

你的WHERE子句中的列有索引吗?

答案 3 :(得分:0)

正如Mark建议的那样,添加一个索引,然后使用COUNT(*)。你在选项1中传输大量数据只是为了计算它然后扔掉它。