如何为大表编写快速计数查询?

时间:2011-06-11 15:07:51

标签: ms-access ms-access-2007

我有两个表,Table1有100,000行,Table2有400,000行。两个表都有一个名为Email的字段。我需要在Table1中插入一个新字段,它将指示表1中每行的电子邮件出现在Table2中的次数。

我为Excel写了一个二进制计数函数,它会在几秒钟内对此数据样本执行此操作。是否可以在Access中快速执行它?

谢谢。

1 个答案:

答案 0 :(得分:3)

此查询是否表达了您希望从Table2中找到的内容?

SELECT Email, Count(*) AS number_matches
FROM Table2
GROUP BY Email;

如果这是你想要的,我不明白你为什么要在另一个表中存储number_matches。只要您需要number_matches,只需使用此查询。

您应该在Table2的电子邮件中有一个索引。

更新:我提供此示例来说明带有GROUP BY的Count()对索引字段的快速程度。

SELECT really_big_table.just_some_text, Count(*) AS CountOfMatches
FROM really_big_table
GROUP BY really_big_table.just_some_text;

really_big_table包含10,776,000行。这个大小远远超出了您通常期望在真实的Access(Jet / ACE)数据库中找到的大小。我保留它以进行不同数据库操作的极端压力测试。

字段just_some_text被编入索引。使用该索引,查询在一分钟内完成。我没有费心去更准确地计时,因为我只对OP的类似查询用于表格的几分钟的粗略比较感兴趣,该表格包括不到5%的行数。

我不明白为什么OP的查询比较慢得多。我的目的是警告其他读者不要忽视这种方法。根据我的经验,这样的操作速度范围从可接受到超快...... 只要数据库引擎有适当的索引可供使用。至少在尝试在表之间冗余地复制值之前先尝试一下。