【发布时间】:2012-04-04 20:08:34
【问题描述】:
这是我的查询:
SELECT solGroup,;
SUM(IIF((;
SELECT COUNT(*) FROM cgift c2;
WHERE c2.solgroup != c1.solgroup AND c1.donor == c2.donor;
) > 0;
,1,0));
countgaveother;
FROM cgift c1;
GROUP BY solGroup
cGift 是一个包含记录列表的游标。
autonumber...donor....solGroup
1............10.......a
2............11.......a
3............10.......b
4............15.......b
5............10.......c
6............15.......c
7............11.......d
8............11.......d
9............16.......d
查询生成以下内容
solGroup.."count of donors who have records with a different solgroup as well as this one"
a..........2
b..........2
c..........2
d..........1
cGift 中大约有 80k 条记录(还有更多此处未使用的字段)。从 vfp 命令窗口运行此查询(加上创建光标的查询)需要 3 秒,从已编译的表单中运行需要 30 分钟。
有人知道为什么性能差异如此之大吗?通常,命令窗口的执行与我编译的表单非常相似。其他查询在这种形式下也可以正常运行。
光标是用select ... into cursor cGift 创建的。它是由捐赠者订购的,但删除它不会改变任何事情。
我使用的是 VFP 9 sp2。有谁知道如何加快速度?
编辑:
好的,我总结一下,看看有没有人有什么想法。
我用select into ... cursor cGift 创建了一个游标。
然后我在所述光标上运行上述查询。
它在命令窗口中很快,但从表单运行时非常慢。
游标和查询的代码完全相同。
我不知道我的表单中的环境设置是开/关/wtvr,因为它是一个非常大的程序的一部分。
【问题讨论】:
标签: sql tsql query-optimization visual-foxpro command-window