【发布时间】:2011-06-14 01:22:59
【问题描述】:
我有两个表,Table1 有 100,000 行,Table2 有 400,000 行。两个表都有一个名为电子邮件的字段。我需要在 Table1 中插入一个新字段,该字段将指示 Table1 中每一行的电子邮件在 Table2 中出现的次数。
我为 Excel 编写了一个二进制计数函数,它可以在几秒钟内对这个数据样本执行此操作。是否有可能在 Access 中如此快速地执行它?
谢谢。
【问题讨论】:
我有两个表,Table1 有 100,000 行,Table2 有 400,000 行。两个表都有一个名为电子邮件的字段。我需要在 Table1 中插入一个新字段,该字段将指示 Table1 中每一行的电子邮件在 Table2 中出现的次数。
我为 Excel 编写了一个二进制计数函数,它可以在几秒钟内对这个数据样本执行此操作。是否有可能在 Access 中如此快速地执行它?
谢谢。
【问题讨论】:
此查询是否表达了您想从 Table2 中找到的内容?
SELECT Email, Count(*) AS number_matches
FROM Table2
GROUP BY Email;
如果这是您想要的,我不明白您为什么要将 number_matches 存储在另一个表中。只需在需要 number_matches 的任何时间/任何时间使用此查询。
您应该有一个关于 Table2 的电子邮件索引。
更新:我提供这个示例来说明 Count() 与 GROUP BY 对索引字段的速度。
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 的查询相比之下要慢得多。我在这里的目的是警告其他读者不要忽视这种方法。以我的经验,这种操作的速度从可接受到极快......只要数据库引擎有一个合适的索引可以使用。至少在您在表之间重复复制值之前尝试一下。
【讨论】: