Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 为什么MS Access中的Teradata查询比SQL Server更快_Sql Server_Ms Access - Fatal编程技术网

Sql server 为什么MS Access中的Teradata查询比SQL Server更快

Sql server 为什么MS Access中的Teradata查询比SQL Server更快,sql-server,ms-access,Sql Server,Ms Access,我需要连接一个有大约5亿条记录的Teradata表和一个有大约10000条记录的本地表。我在MS Access中运行它,运行大约需要15分钟。我更愿意在SQL Server中执行此操作,但甚至无法在本地SQL表中获得包含1条记录的联接 为什么MS Access能够做到这一点,尽管速度很慢,而SQL Server却无法做到?MS Access与SQL Server有什么不同 连接失败的SQL Server查询: SELECT a.trk, a.wgt FROM openquery(TERADATA

我需要连接一个有大约5亿条记录的Teradata表和一个有大约10000条记录的本地表。我在MS Access中运行它,运行大约需要15分钟。我更愿意在SQL Server中执行此操作,但甚至无法在本地SQL表中获得包含1条记录的联接

为什么MS Access能够做到这一点,尽管速度很慢,而SQL Server却无法做到?MS Access与SQL Server有什么不同

连接失败的SQL Server查询:

SELECT a.trk, a.wgt
FROM openquery(TERADATA, 'SELECT trk, wgt 
                          FROM SHIPMENT_DB.pkg') a
INNER JOIN  (Local_Tbl) b ON a.trk = b.Tracking_Number
一个没有联接的简单SQL Server查询:

SELECT * 
FROM openquery(TERADATA,'SELECT trk, wgt 
                         FROM SHIPMENT_DB.pkg 
                         WHERE trk = ''773423067500''') 

不是答案,但我在使用OPENDATASOURCE时遇到了类似的问题。性能很差,查询运行了几个小时。 解决方案是确保WHERE子句中涉及的所有列都具有匹配数据类型。在我的例子中,远程列是INT,但在查询中它是作为varchar传递的:…'WHERE remote_table.ID='4'。。。
将所有值更改为适当的数据类型后,查询需要几秒钟才能运行。

查看SQL Server中的执行计划。因为它对从Teradata返回的数据集知之甚少,所以它正在做一些假设


交换联接中表的顺序将有所帮助。使用显式的
内部哈希联接
可能会有所帮助(一旦您切换了顺序)。

这两个查询都是SQL Server查询。如何进行访问?在MS Access中,我通过ODBC驱动程序连接到Teradata DB。然后,我将500M Terdata表链接到Access,并构建了一个简单的select查询,将两个表连接在一起。它起作用了。MS Access必须执行与SQL Server不同的操作,但什么操作?Access如何处理查询,而不是在加入之前将整个500M Teradata表带过来?我觉得奇怪的是Access能比SQL Server更好地执行这项任务。让我觉得我在SQL Server中做错了什么。我猜Access识别Teradata DB的大小,并通过in子句选择记录。我相信有一种方法可以监控Access发送的内容,但我不能马上知道。至于SQL Server端,使用链接服务器可能比使用openquery获得更好的结果。值得一试。