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

时间:2015-05-15 18:55:27

标签: sql-server ms-access

我需要加入一个包含大约5亿条记录的Teradata表和一条包含大约10,000条记录的本地表。我让它在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''') 

2 个答案:

答案 0 :(得分:0)

不是答案,但我使用OPENDATASOURCE也有类似的问题。性能非常糟糕,查询需要花费数小时才能运行。 解决方案是确保WHERE子句中涉及的所有colmns都具有数学数据类型。在我的例子中,远程列是INT,但在查询中它被作为varchar传递:...'WHERE remote_table.ID =''4'''... 将所有值更改为相应的数据类型后,查询需要几秒钟才能运行。

答案 1 :(得分:0)

查看SQL Server中的执行计划。由于它对将要从Teradata返回的数据集知之甚少,因此它正在做出一些假设。

交换连接中表格的顺序会有所帮助。使用明确的INNER HASH JOIN可能有所帮助(一旦您切换订单)。