这是我的查询:
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,因为它是一个非常大的程序的一部分。