2010-07-19 303 views
1

我有一个有1,000,000条记录的数据库和这样的查询:“SELECT COUNT()”是非常缓慢

select count(code) from table1 

它运作良好,在本地系统上,而是成为在网络上很慢。其他查询如select * from table执行得很快,但select count(code) from table1非常慢。我无法更改数据库的结构。我的数据库是Foxpro,我使用VB.NET。

有没有解决方案?

编辑:我应该这样写代码吗?

dim ds as new dataset 
dim da as new datadapter("select count(*) from table ", connection) 
da.fill(ds,"tbl1") 

那么我怎样才能从数据集中获得select count(code) from table1

还是我必须使用LINQ?

编辑2:我的意思是select count(*)select count(code)之间的比较。
解决方案是什么?

+0

如已经说过,当你需要澄清你的问题,请编辑它而不是发布答案。谢谢! – 2010-07-19 19:34:57

回答

6

它会更快做

select count(*) from table1 

然后使用count(code)

+0

为什么?这似乎与直觉相反。 – 2010-07-19 18:26:05

+0

@David:基本上,'count(*)'被视为一种特殊情况:它只是对行进行计数而不检索任何数据。 'count(code)'检索列来计算它。 – 2010-07-19 18:40:47

0

select count(code)从表中选择列'代码',然后对它们进行计数,但是select *只是选择它们,但不会计数。所以如果你比较这两个,那么逻辑上选择*是很快的。

对于我的表,有超过100万记录,执行时间是:

选择* = 0.9818625

SELECT COUNT(列)= 1.571275