Sql server 为什么MS Access中的Teradata查询比SQL Server更快
我需要连接一个有大约5亿条记录的Teradata表和一个有大约10000条记录的本地表。我在MS Access中运行它,运行大约需要15分钟。我更愿意在SQL Server中执行此操作,但甚至无法在本地SQL表中获得包含1条记录的联接 为什么MS Access能够做到这一点,尽管速度很慢,而SQL Server却无法做到?MS Access与SQL Server有什么不同 连接失败的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
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获得更好的结果。值得一试。