从具有大量数据的联接中选择 Table
Selecting into a Table from a Join with Large Amounts of Data
我正在尝试将两个 table 的结果按日期范围过滤,并将创建的 select 连接到一个新的 table。有两个table:一个是50万左右的记录,一个是1.5亿左右。我试图 运行 代码使用内部连接来提取。这通常是 运行 秒,直到我收到一条错误消息,提示我已用完所有光盘 space。我不确定问题是出在巨大的 table 本身的连接上,还是我正在尝试将结果写入新的 table。还要注意的是,大 table 作为视图位于链接服务器上。
SELECT
* INTO New_Table
FROM
OPENQUERY(
[Linked_Server],
'SELECT * FROM [LinkedDB].[Schema].[LinkedServerTable]'
) IL
INNER JOIN [Schema].[OtherTableFromLocalHost] I ON IL.IdColumn = I.IdColumn
WHERE
I.IDate >= CONVERT(DATE, '1/1/2020')
AND I.IDate < CONVERT(DATE, '1/31/2020')
您正在跨服务器事务中执行分布式联接。您非常希望在一台服务器的内存中加入 运行。网络比 RAM 慢得多。
我记得因为这样的事情重启过服务器。进展是 - 尝试终止进程,尝试重新启动 dtc,尝试重新启动实例,尝试重新启动服务器。
- 您是否需要两个 table 中的所有列?
- 通常从 [Schema].[OtherTableFromLocalHost] 中选择多少条记录?
如果这是在大 table 所在的位置执行的,我会将较小的 table 加载到本地临时文件 table 中。然后我会使用本地事务来进行连接。您可以尝试使用大 table 执行此操作。 1.5 亿条记录需要 space。它可能会工作得更快。
是否有其他服务器上的链接服务器到此服务器?在远程查询中,您可以使用 WHERE 子句从 [Schema].[OtherTableFromLocalHost] 加载 IdColumn 到该服务器上的临时 table。然后在那里加入。然后将数据返回到临时 table。使用临时 table 执行任何需要的连接,然后插入到最终目的地。
对于一个进程,我确实创建了一个 xml 值文档以传递到远程服务器。远程服务器加入 xml(节点内容)以在没有分布式加入的情况下获取所需的数据。
我正在尝试将两个 table 的结果按日期范围过滤,并将创建的 select 连接到一个新的 table。有两个table:一个是50万左右的记录,一个是1.5亿左右。我试图 运行 代码使用内部连接来提取。这通常是 运行 秒,直到我收到一条错误消息,提示我已用完所有光盘 space。我不确定问题是出在巨大的 table 本身的连接上,还是我正在尝试将结果写入新的 table。还要注意的是,大 table 作为视图位于链接服务器上。
SELECT
* INTO New_Table
FROM
OPENQUERY(
[Linked_Server],
'SELECT * FROM [LinkedDB].[Schema].[LinkedServerTable]'
) IL
INNER JOIN [Schema].[OtherTableFromLocalHost] I ON IL.IdColumn = I.IdColumn
WHERE
I.IDate >= CONVERT(DATE, '1/1/2020')
AND I.IDate < CONVERT(DATE, '1/31/2020')
您正在跨服务器事务中执行分布式联接。您非常希望在一台服务器的内存中加入 运行。网络比 RAM 慢得多。
我记得因为这样的事情重启过服务器。进展是 - 尝试终止进程,尝试重新启动 dtc,尝试重新启动实例,尝试重新启动服务器。
- 您是否需要两个 table 中的所有列?
- 通常从 [Schema].[OtherTableFromLocalHost] 中选择多少条记录?
如果这是在大 table 所在的位置执行的,我会将较小的 table 加载到本地临时文件 table 中。然后我会使用本地事务来进行连接。您可以尝试使用大 table 执行此操作。 1.5 亿条记录需要 space。它可能会工作得更快。
是否有其他服务器上的链接服务器到此服务器?在远程查询中,您可以使用 WHERE 子句从 [Schema].[OtherTableFromLocalHost] 加载 IdColumn 到该服务器上的临时 table。然后在那里加入。然后将数据返回到临时 table。使用临时 table 执行任何需要的连接,然后插入到最终目的地。
对于一个进程,我确实创建了一个 xml 值文档以传递到远程服务器。远程服务器加入 xml(节点内容)以在没有分布式加入的情况下获取所需的数据。