sql - 在 Access 中使用计算字段是否可以提高效率

标签 sql ms-access database-design calculated-field

我有一个数据库,用于跟踪学校学生的出勤情况。有一张表 (SpecificClasses) 包含所有类(class)的日期,另一张表 (Attendance) 包含每个类(class)的所有学生及其当天出勤情况的列表.

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

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

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

最佳答案

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

TableDesign.png

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

BeforeChange.png

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

关于sql - 在 Access 中使用计算字段是否可以提高效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29214760/

相关文章:

mysql - 在整个表中更改 MySQL ENUM 值的值

mysql - 表存在于显示表中,但当我尝试从中选择时不存在

mysql - 如何在匹配中使用 substring_index

c# - 如何将内部数字日期转换为 Access 日期/时间格式?

mysql - SQL中的字符串到整数的转换是自动的吗?

mysql - 如何创建记录并分配给 3 个子类型中的 1 个,每个子类型具有不同的属性

database-design - 数据库设计::2 个参与者事件中的规范化::加入表或 2 列?

mysql - SQL查询最近记录

java - JPA/Hibernate如何获取每个类别的N个项目

sql - 在连续表单中,我能否让组合框根据其自身记录中的字段或文本框值使用不同的查询?