これが私のクエリです:
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 には約 80,000 のレコードがあります (ここでは使用されていないさらに多くのフィールドがあります)。このクエリ (およびカーソルを作成するクエリ) を vfp コマンド ウィンドウから実行するには 3 秒かかり、コンパイルされたフォーム内から実行するには 30 分かかります。
パフォーマンスの違いが非常に大きい理由を知っている人はいますか? 通常、コマンド ウィンドウはコンパイル済みのフォームと非常によく似た動作をします。他のクエリもこの形式で問題なく実行されます。
カーソルはselect ... into cursor cGift
. ドナーによって注文されますが、これを削除しても何も変わりません。
私は VFP 9 sp2 を使用しています。どうしたら速くなるか知ってる人いますか?
編集:わかりました、要約して、他の誰かが何かアイデアを持っているかどうか見てみましょう.
でカーソルを作成しますselect into ... cursor cGift
。
次に、上記のカーソルで上記のクエリを実行します。
コマンド ウィンドウでは高速ですが、フォームから実行すると非常に遅くなります。
カーソルとクエリの両方でまったく同じコード。
非常に大きなプログラムの一部であるため、私のフォームでどの環境設定が on/off/wtvr なのかわかりません。