Access中使用计算字段提高效率吗

Does using calculated fields in Access increase efficiency

我有一个数据库可以跟踪学校学生的出勤情况。有一个 table (SpecificClasses) 包含所有 classes 的日期,另一个 table (Attendance) 包含所有学生的列表class 以及他们当天的出席情况。

学校希望能够以多种不同的方式查看该数据,并根据多种不同的参数对其进行过滤。 (我不会在这里粘贴整个查询,因为它非常复杂,而且细节对我的问题并不重要。)他们想要的选项之一是查看特定学生在一周中某一天的出勤情况。意思是,他们希望能够注意到每周二或类似时间是否有学生失踪。

为了使查询能够做到这一点,我使用了 DatePart("w",[SpecificClasses]![Day])。但是,运行 每个 class(当我们谈论的是一个学生在一个学期内完成数百 class 课时)是非常耗时的。所以我正在考虑手动将星期几存储在 SpecificClasses table 中,或者甚至可能在 Attendance table 中以避免进行连接,并且只是在我的活动中非常小心地保持这些数据是最新的(意思是在秘书插入新的 SpecificClass 或修复 Day 字段时填写信息)。

然后我想知道我是否可以制作一个计算字段来存储这个值。 (学校有 Access 2010,所以我不用担心兼容性问题)。如果我创建一个计算字段,Access 是否实际存储该字段并记住它以备将来使用,而不必每次都重新计算?

I was wondering whether I could just make a calculated field that would store this value.

不,不适用于使用 DatePart() 的计算字段表达式。 Access 支持一组有限的计算字段函数,DatePart() 不是其中之一。

If I create a calculated field, does Access actually store that field and remember it for the future and not have to recalculate it each time?

不适用于您当前的案例。但是对于 Access 接受的计算字段,是的,这就是它的工作方式。

但是,计算字段无法编制索引,因此限制了它在数据检索速度方面的改进。如果您遇到另一种可以创建有效计算字段的情况,请测试性能以查看您是否注意到任何改进(与计算查询中的值相比)。

对于您的 DatePart() 查询问题,考虑创建一个日历 table,每个日期各占一行,并将工作日编号作为单独的索引字段。然后,您可以将日历 table 加入到您的查询中,避免再次计算 DatePart() 的需要,并允许 Access 使用索引工作日编号来快速识别哪些行与感兴趣的工作日匹配。

正如 HansUp 在他的回答中提到的那样,无法为计算字段编制索引,因此它可能不会给您带来很大的性能提升。但是,由于您使用的是 Access 2010,您可以创建一个名为 [WeekdayNumber] 的 "real" 整数字段并在其上放置一个索引,

然后使用更改前 data macro 为您插入 Weekday() 值:

Weekday() 函数给出与 DatePart("w", ...) 相同的结果。)