Вот мой запрос:
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к записей (и еще много полей, которые здесь не используются). Запуск этого запроса (плюс запрос, создающий курсор) из командного окна vfp занимает 3 секунды, а из скомпилированной формы — 30 минут.
Кто-нибудь знает, почему разница в производительности так велика? Обычно окно команд работает очень похоже на мои скомпилированные формы. Другие запросы также прекрасно работают в этой форме.
Курсор создается с помощью select ... into cursor cGift
. Его заказывает донор, хотя его удаление ничего не меняет.
Я на VFP 9 sp2. Кто знает как ускорить?
РЕДАКТИРОВАТЬ: Хорошо, позвольте мне подвести итоги и посмотреть, есть ли у кого-нибудь еще какие-либо идеи.
Я создаю курсор с помощью select into ... cursor cGift
.
Затем я запускаю вышеуказанный запрос для указанного курсора.
Это быстро в командном окне, но очень медленный при запуске из формы.
Точно такой же код и для курсора, и для запроса.
Я понятия не имею, какие параметры среды включены/выключены/wtvr в моей форме, так как это часть очень большой программы.