gpt4 book ai didi

sql-server - 为什么 Access 按表分解 JOIN 查询,然后将每个查询分别传递给 ODBC (SQL Server)?

转载 作者:行者123 更新时间:2023-12-03 19:32:52 24 4
gpt4 key购买 nike

为什么 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 )

session 1:   Select a from t1
Session 2. select b from t2
session 3. select c from t3

最佳答案

Microsoft Access(应用程序)使用 Access 数据库引擎(又名“ACE”,以前的“Jet”)来处理其查询。因此,它倾向于将表视为离散实体,就像 SQL Server 查询引擎对其自己的表所做的那样。 (您可能会向 SQL Server 请求来自 Table1 INNER JOIN Table2 的信息,但在查询的低级处理过程中的某个时刻,SQL Server 引擎必须从各个表中提取数据。)

在您的特定情况下,当所有三个表都在 SQL Server 中时,ACE 会分别从每个表中提取信息,这似乎令人费解,并且将整个查询传递给 SQL Server 进行处理可能会更加有效。然而,给定的 ODBC 链接表可以由任意数量的“数据库技术”支持,这些技术具有广泛不同的功能和互操作性程度。

例如,您的查询可能很容易出现以下情况:

  • [t1] 是本地 Access 表,
  • [t2] 是 SQL Server 上的 ODBC 链接表,并且
  • [t3] 是 CSV 文件中的数据表。

ACE 可以处理这些类型的查询,但它只能通过适应一般情况才能做到这一点,而这可能会以牺牲针对特定情况(例如您的情况)的优化为代价。

如果您确实需要在 SQL Server 上运行整个查询,那么您始终可以

  1. 创建 pass-through query在 Access 中,或者
  2. 为该查询创建一个 SQL Server VIEW,然后使用 ODBC 链接“表”到该 VIEW(而不是链接到各个 SQL Server 表)。

关于sql-server - 为什么 Access 按表分解 JOIN 查询,然后将每个查询分别传递给 ODBC (SQL Server)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24193302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com