为何SQL Server执行该查询耗时远超MS Access?
性能差异问题:MS Access vs SQL Server 查询远程GSS表
查询逻辑完全一致,均从同一张远程表V_JOB_HEADER提取数据,该表属于Global Shop Solutions(GSS)ERP系统。两者唯一区别:
- MS Access中将
V_JOB_HEADER配置为链接表 - SQL Server中通过
OPENQUERY语句查询该远程表
执行耗时差距极大:
- MS Access执行仅需2秒
- SQL Server执行需要2分钟
原本怀疑是Access缓存了远程表结果导致,但关闭并重新打开Access数据库后,查询速度依然很快,说明并非临时缓存,可能存在某种“永久”缓存机制。
SQL Server 查询代码
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的连接字符串中截断了链接表的完整名称)
内容的提问来源于stack exchange,提问作者TheMortiestMorty
相关产品推荐
相关产品推荐

