我一直致力于将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条记录。
答案 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
子句的解析从左到右。我很确定这会返回相同的结果集。