从 Access 中的另一个表返回值时,为啥我的查询运行如此缓慢?

Posted

技术标签:

【中文标题】从 Access 中的另一个表返回值时,为啥我的查询运行如此缓慢?【英文标题】:Why is my query running so slowly when returning values from another table in Access?从 Access 中的另一个表返回值时,为什么我的查询运行如此缓慢? 【发布时间】:2014-02-07 16:40:39 【问题描述】:

我正在 MS Access 中运行一个相当简单的查询。我正在尝试使用 WHERE 子句从表中过滤结果。我的陈述如下:

SELECT DATA.*
FROM DATA
WHERE DATA.Account_Number In (
    SELECT Lookup.AccNum 
    FROM Lookup
);

我注意到这个查询执行起来非常慢。

相反,如果我明确命名帐号,则结果会在很短的时间内返回。

SELECT DATA.*
FROM DATA
WHERE DATA.Account_Number In ("00001","00002","00003","00004","00005");

第二个查询只需要几秒钟,而第一个查询 - 以表格格式给出相同数量的帐户 - 需要几分钟。

【问题讨论】:

Lookup 中有多少条记录? 该表仅包含 1 个字段,5 条记录。它可以轻松地从 Excel 中转储帐户列表,而无需在引号和逗号分隔的范围内对其进行格式化。 【参考方案1】:

您似乎想使用Lookup 过滤DATA。您可以通过连接这两个表来实现。

Lookup.AccNum 上创建索引(如果它尚未编入索引)。

SELECT d.*
FROM
    DATA AS d
    INNER JOIN Lookup AS l
    ON d.Account_Number = l.AccNum;

【讨论】:

如果Account_NumberAccNum 不是两个文本数据类型,请告诉我们。 已确认。 AccNum 是整数,而 Account_Number 是文本。另外,为了将来参考,我很好奇为什么我的原始帖子被编辑了。 如果可能,将两个字段设置为相同的数据类型,这样 Access 就不需要为 join 或 IN () 比较执行数据类型转换。 关于编辑,见Should 'Hi', 'thanks,' taglines, and salutations be removed from posts?。 很抱歉,我对 Access 和通用数据库中的这个概念不太熟悉。有没有一种方法可以在 SQL 中转换,就像我会使用变量一样?或者,是否需要在架构中进行更改?另外,感谢您对编辑的澄清。等等,这允许吗?只是在开玩笑。 ;)

以上是关于从 Access 中的另一个表返回值时,为啥我的查询运行如此缓慢?的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 MS Access 表单保存到同一个 MS Access 数据库中的另一个表?

当用户在 MS Access 中修改表中的另一列时,如何在 SQL Server 中将列设置为今天的日期 [关闭]

需要表单上的按钮以将表的字段名称插入 Access 中的另一个表

当我尝试从文本文件输入值时,为啥我的类列表(在 C++ 中)会引发错误?

如何从 Access 2010 中的 SQL 存储过程返回多个记录集

为啥我不能直接使用不在函数后面的另一个表中的列?