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