sql - 优化笨拙的查询

标签 sql ms-access

我在一所学校工作,并建立了一个数据库来帮助解决检查哪些 child 去了哪些课后俱乐部的噩梦。

我尝试通过构建一个数据库来做到这一点,该数据库使用链接表从 42 个寄存器(Excel 文档)中的每一个中提取数据。然后,我设置了几个查询,从特定表格中搜索学生,然后生成一份报告,以便每个表格组都可以查看其表格中的 child 是否在特定的一周内去过俱乐部。

我对 SQL 的了解很基础:我可以编写查询来执行各种操作,但不知道如何优化大型查询。

我遇到的问题是每个报告需要 2 分 30 秒才能生成,现在我已将所有 42 个寄存器添加到查询中。以前,当我只有 31 时,报告在 30 秒内生成。

以下是查询示例:

SELECT [UID], [Name], [Group], [Week 1], [Week 2], [Week 3],
    [Week 4], [Week 5], [Week 6]
FROM [club 1]
WHERE ((([Club 1].[Group])="group name"))

UNION ALL 

SELECT [UID], [Name], [Group], [Week 1], [Week 2], [Week 3],
    [Week 4], [Week 5], [Week 6]
FROM [club 42]
WHERE ((([Club 42].[Group])="group name"));

该查询在最初的 SELECT 之后有 41 个 UNION ALL SELECT,很可能是最无用、写得最糟糕的查询,但是,正如我所说,我的 SQL 知识很基础,而且我正在边学习边学习。

更多信息: 这些登记册上有 480 名学生,一名学生一周内可以参加多个俱乐部,因此查询需要查找学生参加俱乐部的每个实例。

除了将 Access 与 Excel 结合使用之外,其他选项非常非常有限。我和一些 friend 交谈过,研究了 MySQL 方法并在网络上设置本地服务器,但我们的网络是托管服务,管理它的公司很敏感,至少可以说在他们的服务器上设置了类似的东西(这是可以理解的)。

我想,对于我所需要的,这可能是唯一的方法,并且花费 2 分 30 秒进行查询比每周五手动检查每个寄存器花费 30 分钟要好。我试图解决这个问题的原因是:

A) 我想进一步扩展我的编程知识,但到目前为止,我已经成功地错过了 SQL
B) Access 数据库的老师常常不耐烦,在加载报告时随意单击,试图使其更快地工作,或者出于沮丧,经常使 Access 崩溃

最佳答案

我的建议是不要每个俱乐部都有一张 table ,而只有一张带有附加列[Club_Name]的 table 或一个ID,以便稍后将结果加入到俱乐部 table 中。

这样查询将类似于:

SELECT [UID], [Name], [Group], [Club_Name], [Week 1], [Week 2], [Week 3],
    [Week 4], [Week 5], [Week 6]
FROM [Clubs]
WHERE ((([Clubs].[Group])="group name"));

你认为这可能吗?

关于sql - 优化笨拙的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9452862/

相关文章:

java - JDBC-ODBC SQLException :General Error

ms-access - MS Access 嵌套子表单链接到主(父)表单

mysql - 通过 SSH 连接 (PuTTY) 通过 MS Access 操作 MySQL 数据库

sql - Rails 4 - 对关联计数的查询大于属性

sql - Postgres 查询以获取所有子 ID

mysql - 从一对多关系中只检索一条记录

vba - 使用VBA不小心创建了一个带有空字符的文件夹,无法删除该文件夹

linux - 有什么可以替代Access的吗?

php - 如何将数组分配给sql查询的变量

sql - 如何使用 MSSQL 在值为空的特定表中的所有列中设为 0