这是我的疑问:
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是什么环境设置,因为它是一个非常大的程序的一部分。
答案 0 :(得分:2)
应用程序与命令窗口有什么不同?以下是一些可能性:
可能还有其他一些,但我的猜测是其中的一个或多个。
玛
答案 1 :(得分:1)
我同意这可能是你的命令框环境与执行程序的环境有关。我将表的SHARED / EXCLUSIVE状态和/或SET('EXCLUSIVE')的设置添加到要检查的事物列表中。
答案 2 :(得分:0)
SELECT *;
FROM cgift;
LEFT JOIN;
(select donor donor2, count(distinct solgroup) activesols from cGift group by donor);
b ON cgift.donor = b.donor2 INTO CURSOR cgift
然后我算一下activesol> 1
合并这些会使一切变得非常缓慢。