使用带有SQL后端的Access前端

时间:2016-05-01 20:44:22

标签: sql-server ms-access sql-server-2014-express

我一直致力于将Access数据库转换为MS SQL。对于我的初始测试,我已经使用SQL Server Express 2014将后端数据导入到我的系统中。到目前为止,除了一个查询之外,我已经能够将所有内容用于我的Access前端。

在有问题的表上设置主键有助于一些但不完全。当我在Access中运行查询时,它将花费大约10秒的时间来运行,但是当我从第二台计算机运行它时,运行将需要30秒。但是,如果我直接运行查询Server Management Studio,它会在一秒钟内运行。

我不确定减速是否是由于我从笔记本电脑上运行SQL,因为它是SQL Server Express,或两者兼而有之。我希望有人可以为我提供更多信息。

以下是查询的副本:

SELECT tbl_defects.*,
       tbl_parts.part_type,
       tbl_parts.number,
       tbl_parts.mold,
       tbl_parts.date_created,
       tbl_parts.blade,
       tbl_parts.product,
       tbl_defects.defects_id
FROM   tbl_parts
       RIGHT JOIN (tbl_dispositions
                   RIGHT JOIN tbl_defects
                           ON tbl_dispositions.dispositions_id =
                              tbl_defects.disposition)
               ON tbl_parts.parts_id = tbl_defects.part
ORDER  BY tbl_defects.defects_id DESC; 

在tbl_Defects上,主键是Defects_ID,它被设置为索引。在tbl_disposition上,主键是Disposition_ID,它被设置为index。第三个表tbl_parts主键是Parts_ID,它也被设置为索引。

如果我将任何右连接切换为内连接,则查询将正常运行,但它将丢失约2000条记录。

2 个答案:

答案 0 :(得分:2)

根据我的经验,在链接表上的Access中运行时,一些具有多个LEFT(或RIGHT)JOIN的查询执行得很糟糕。

如果可能的话,我建议为此创建一个传递查询(如果您不需要编辑结果集)。这将直接在服务器上运行,就像在SSMS中一样。

或者您可以在SQL Server上创建一个视图并链接它。

答案 1 :(得分:0)

您可以尝试使用更多约定left join方法运行查询吗?

FROM tbl_Defects LEFT JOIN
     tbl_Dispositions
     ON tbl_Dispositions.Dispositions_ID = tbl_Defects.Disposition LEFT JOIN
     tbl_Parts
     ON tbl_Parts.Parts_ID = tbl_Defects.Part

如果您需要括号:

FROM (tbl_Defects LEFT JOIN
      tbl_Dispositions
      ON tbl_Dispositions.Dispositions_ID = tbl_Defects.Disposition 
     ) LEFT JOIN
     tbl_Parts
     ON tbl_Parts.Parts_ID = tbl_Defects.Part

由于连接,执行计划中可能会出现乱码。 RIGHT JOIN可能非常棘手,因为FROM子句的解析从左到右。我很确定这会返回相同的结果集。