1

我有以下脚本:

SELECT 
    DEPT.F03 AS F03, DEPT.F238 AS F238, SDP.F04 AS F04, SDP.F1022 AS F1022, 
    CAT.F17 AS F17, CAT.F1023 AS F1023, CAT.F1946 AS F1946 
FROM 
    DEPT_TAB DEPT 
LEFT OUTER JOIN 
    SDP_TAB SDP ON SDP.F03 = DEPT.F03, 
CAT_TAB CAT 
ORDER BY 
    DEPT.F03

表很大,当我直接在 SQL Server 中执行脚本时,执行大约需要 4 分钟,但是当我在第三方程序(基于 Delphi 的 SMS LOC)中运行它时,它给了我错误

<msg> out of memory</msg> <sql> the code </sql>

无论如何我可以减轻要执行的脚本吗?还是有人遇到同样的问题并以某种方式解决了?

4

3 回答 3

3

我记得曾经在查询优化器迷失方向的查询中不得不求助于ROBUST PLAN查询提示,并试图以硬件无法处理的方式解决它。

=> http://technet.microsoft.com/en-us/library/ms181714.aspx

但我不确定我是否理解为什么它适用于一种“技术”而不适用于另一种。再说一次,错误消息可能不是来自 SQL,而是来自收集输出并以“不太理想”的方式执行的第 3 方程序。

于 2013-10-22T20:07:40.547 回答
1

考虑向用户编辑屏幕和底层数据调用添加分页。关键是您不需要一次查看所有行,但用户可以根据要求使用它们。

这将缓解您的大部分性能问题。

于 2013-10-22T21:37:16.340 回答
0

我有一个项目,我必须通过批处理添加超过 700 万行 T-SQL 代码(无法弄清楚如何以编程方式利用新的 SEQUENCE 命令)。问题是我的虚拟机上可用的内存量有限(我被分配了这个虚拟机的最大内存量)。由于大量的 T-SQL 代码行,我必须首先测试在服务器崩溃之前可以执行多少行。无论出于何种原因,SQL (2012) 都没有释放它用于像我这样的大批量作业的内存(我们谈论的是大约 12 GB 的内存),所以我必须每百万行左右重新启动一次服务器。如果您的项目的资源有限,这就是您可能需要做的事情。

于 2013-10-22T21:33:54.193 回答