为什么Access 2013会采用如下完美的查询:
Select t1.A,t2.b,t3.c
from T1
Inner Join t2 on t2.a = t1.a
Inner Join t3 on t3.a = t1.a
并将其分解为3个不同的工作(会话)
session 1: Select a from t1
Session 2. select b from t2
session 3. select c from t3
答案 0 :(得分:5)
Microsoft Access(应用程序)使用Access数据库引擎(a.k.a" ACE",之前" Jet")来处理其查询。因此,它倾向于将表视为离散实体,就像SQL Server查询引擎对其自己的表一样。 (您可能会向SQL Server询问Table1 INNER JOIN Table2
中的信息,但在查询的低级处理中,SQL Server引擎必须从各个表中提取数据。)
在您的特定情况下,当所有三个表都在SQL Server中时,ACE分别从每个表中提取信息可能会令人费解,并且将整个查询传递给SQL Server进行处理可能要高效得多。但是,给定的ODBC链接表可以由任意数量的数据库技术支持"具有广泛不同的功能和互操作性程度。
例如,您的查询可能就像以下情况一样容易:
ACE可以处理那些类型的查询,但它只能通过能够适应一般情况来实现,而这可能是以优化特定情况为代价的(例如你的)。
如果确实需要让整个查询在SQL Server上运行,那么您始终可以