1

我有一个前端应用程序,它允许其他人根据选择的选项创建详细的 SQL 查询。然后,此 SQL 代码用作传递查询,并显示为表单的一部分。

但是,创建的直通查询异常缓慢。在 Access 中运行时,它们的范围从 3 分钟到 20 分钟不等。SQL Server Management Studio 2012 设法在 45 秒到 3 分钟内完成相同的查询。如何最小化或消除这个时间差?

tldr:

  • 在 SSMS 中运行查询的时间:45 秒

  • 在 Access 中运行查询的时间:3 分钟

  • 打开包含查询的访问表单的时间:3 分钟

问题背后的结构

查询的结构如下

SELECT ...
FROM
    (
    SELECT ...
    FROM
        (
        SELECT ... FROM Archive.YearXX
        UNION
        SELECT ... FROM Archive.YearXX
        UNION
        SELECT ... FROM Current.Year16
        )
        LEFT JOIN ReferenceData.Table ON...
    )
WHERE ...
GROUP BY ...
ORDER BY ...

其中各种选项几乎可以更改代码中的任何内容,从UNION段中拉出哪些表,在语句中返回哪些字段SELECT,包含在WHEREGROUP BYORDER BY子句中的内容。

所有 SQL Server 都位于同一本地位置,并且引用的表范围从 20 个字段乘以 100,000 行到 30 个字段乘以 13,000,000 行

当前连接字符串(实际数据已编辑):

ODBC;Driver=SQL Server;Server=[server name];DATABASE=[database];UID=[username];PWD=[password];

创建 QueryDef 的 VBA 代码:

Set qdf = CurrentDb.CreateQueryDef("GeneratedReportData", GenSQL(False))
    qdf.Connect = "ODBC;Driver=SQL Server;Server=[server name];DATABASE=[database];UID=[username];PWD=[password];"
    qdf.ReturnsRecords = True
    qdf.ODBCTimeout = 0

约束

  • 我无法更改我正在使用的语言或软件。

  • 关于子查询的结构和使用几乎没有什么可以做的。

4

0 回答 0