直通查询如何提高速度?
Posted
技术标签:
【中文标题】直通查询如何提高速度?【英文标题】:How does pass through query increase the speed? 【发布时间】:2018-12-08 11:36:20 【问题描述】:听说直通查询提高了数据检索的速度,因为 SQL Server 使用的是 T-SQL 语言,速度更快。但是,既然 Jet-SQL 由 ODBC 驱动程序转换为 T-SQL,那么通过查询拥有什么优势呢?
【问题讨论】:
相比什么提高速度? 您似乎对 Access 数据库引擎如何处理链接表上的普通查询和直通查询缺乏基本的了解。这样的话题对于 Stack Overflow 来说太宽泛了。你最好找一本好的Access书。这个问题没有多大意义。 PT 查询使用后端(sql server 引擎。您的情况)执行。使用 JET 引擎执行本地查询。 【参考方案1】:对于记录的简单检索:不。正如您提到的,ODBC 驱动程序转发的 SQL 将与您在 PT 查询中发送的相同。
您可以激活 ODBC 日志记录(查看此内容)并检查发送到服务器的 SQL。不过,请记住再次将其关闭。
另外,请注意 PT 查询始终是只读的。
【讨论】:
远非如此简单。关于查询编译、缓存、连接管理的逻辑可能不同。一个简单的小表上的快速 100 * 本地查询SELECT * FROM sometable
和 100 * 直通查询显示有 5 秒的时间差,有利于本地查询。你的答案不正确,不一样。
可能是真的,@ErikvonAsmuth,但查询 100 次并不是我对 简单检索 的想法。
关键是,如果我只查询一次,它还不够重要。我运行相同的查询 100 次,每次运行都打开和关闭。这意味着对于单个查询,差异为 0.05 秒,虽然不多,但也不相同,大约是我运行的查询总成本的 1/5。
这就是我的意思@ErikvonAsmuth - 可能会有比优化 0.05 秒更重要的任务。
是的,但仍然不一样。问题不是:我是否应该更改为一种查询来优化性能,问题是:直通查询如何提高速度。那应该关闭imo,因为1.他们有时不会,2.不同版本的Access以不同的方式处理直通查询(2010年不重用连接,2016年在我的设置中,导致速度提高+错误如果您使用身份插入),3. 它取决于查询的类型,这使得它非常宽泛 imo【参考方案2】:
如果您使用 MS Access 作为前端,并且不使用直通查询,Access 将通过网络提取它需要的所有数据并在本地使用它来运行查询。直通查询不必经历通过网络复制数据的低效过程。
【讨论】:
对,但是一个表上的 pt 查询与标准链接表的 pt 查询和绑定报告或表单都只提取满足“where”子句(您提供的条件)的记录。即使是到 sql server 的标准链接表也不会将整个表拉到本地。在标准链接表与 pt 查询的情况下,您在这里看不到任何性能差异。事实上,如上所述,带有非 PT 查询的表单实际上可能会做得更好,因为它保持连接打开。 我还应该补充一点,如果您在 PT 查询中请求数据而不是标准链接表中的数据,那么在这两种情况下,访问都只会提取符合条件的记录 - 所以 PT 查询不会魔术会运行得更快,也不会减少网络流量。只有在涉及多个表(连接)或更新大量记录时,该 PT 查询才会运行得更快——这可能发生在服务器端。但是,使用链接表或 PT 查询拉取 10 条记录意味着在这两种情况下只有 10 条记录通过网络管道。访问会拉动整个表格是一个常见的神话 - 它不会。 我的立场是正确的。我没有考虑过滤发生在哪里。我根本没想过。感谢您的说明。以上是关于直通查询如何提高速度?的主要内容,如果未能解决你的问题,请参考以下文章
MS Access 直通查询 - 使用 ODBC 连接字符串时非常慢,手动选择数据源时速度快 - 问题出在哪里