在 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 在上面的连接字符串中切断了链接表的全名,不知道为什么)