为什么 SQL Server 难以处理此查询而 MS Access 却没有?

问题描述 投票:0回答:0

在 MS Access 中,此查询的结构相同,并从相同的表中提取。唯一的问题是

V_JOB_HEADER
是不同服务器上的远程表。在 MS Access 中,这被设置为链接表。在 SQL Server 中,它是通过
OPENQUERY
.

查询的

远程表是一个名为 Global Shop Solutions 的 ERP 产品的表。

MS 访问:2 秒

SQL 服务器:2 分钟

我唯一能解释这种巨大处理时间差异的方法是,如果 Access 正在缓存远程表的结果,但即使我关闭并重新打开 Access 数据库,速度仍然存在!因此,如果正在进行缓存,它会以某种方式“永久”将数据缓存在某处......

if object_id('tempdb..#VJOBHEADER') is not null drop table #VJOBHEADER

--#VJOBHEADER 
select 

    *

into #VJOBHEADER

from

    openquery(GSS, 'select * from V_JOB_HEADER') t --1 min 27 seconds; 
    
select

    p.*

from

    [Production Order] p with(nolock)
    left join #VJOBHEADER v on p.JOB = v.JOB and p.SUFFIX = v.SUFFIX

where

    v.JOB is null
    and p.Status not in ('CLOSED','COMPLETE','STOCKED')
    and left(p.Status, 7) <> 'SHIPPED'
    and left(p.[PrO Number], 1) not in ('A','B')

if object_id('tempdb..#VJOBHEADER') is not null drop table #VJOBHEADER

Access中链接表的连接字符串:

ODBC;DSN=GLOBAL_APT;ServerName=SERVERNAME.1583;UID=COMPANYNAME;ArrayFetchOn=1;ArrayBufferSize=8;TransportHint=TCP;DBQ=GLOBALAPT;OpenMode=0;ClientVersion=14.21.010.000;CodePageConvert=1252;PvClientEncoding=CP1252 ;PvServerEncoding=CP1252;AutoDoub;TABLE=V_JO

(注意 - 由于某些原因,Access 在上面的连接字符串中切断了链接表的全名,不知道为什么)

sql-server ms-access ms-access-2016 sql-server-2019 global-shop-solutions
© www.soinside.com 2019 - 2024. All rights reserved.