【发布时间】:2015-05-15 18:55:27
【问题描述】:
我需要连接一个包含大约 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''')
【问题讨论】:
-
这两个查询都是 SQL Server 查询。 Access 是如何参与的?
-
在 MS-Access 中,我通过 ODBC 驱动程序连接到 Teradata DB。然后,我将 500M Terdata 表链接到 Access 并构建了一个简单的选择查询,将这两个表连接在一起。有用。 MS-Access 必须做一些不同于 SQL Server 的事情,但是什么? Access 不是在加入之前将整个 500M Teradata 表带过来,而是如何处理查询?我觉得很奇怪,Access 比 SQL-Server 能更好地执行这个任务。让我觉得我在 SQL Server 中做错了什么。
-
我的猜测是 Access 可以识别 Teradata DB 的大小并通过 IN 子句选择记录。我相信有一种方法可以监视 Access 发送的内容,但不知道它是不是临时的。至于 SQL Server 端,使用链接服务器而不是 openquery 可能会获得更好的结果。值得一试。
标签: sql-server ms-access