Механизмы 4gl и SQL используют очень разные подходы к отправке данных клиенту.По умолчанию SQL намного быстрее.Чтобы получить аналогичную производительность от 4gl вам нужно настроить несколько параметров.Я предлагаю:
-Mm 32600 # messages size, default 1024, max 32600
-prefetchDelay # don't send the first record immediately, instead bundle it
-prefetchFactor 100 # try to fill message 100%
-prefetchNumRecs 10000 # if possible pack up to 10,000 records per message, default 16
До изменения 11.6 -Mm требуется ОБА и клиент, и сервер.Начиная с версии 11.6, только сервер должен быть изменен.
Для параметров -prefetch * необходим как минимум OpenEdge 10.2b06.
Хотя есть предупреждения (помимо прочего, объединения не принесут пользы)Эти параметры потенциально могут значительно улучшить производительность «запросов NO-LOCK».Простое:
FOR EACH table NO-LOCK:
/* ... */
END.
может быть значительно улучшено с помощью указанных выше параметров.
Использование списка ПОЛЕЙ также может сильно помочь, поскольку сокращает объем данных и, следовательно,количество сообщений, которые нужно отправить.Поэтому, если вам нужны только некоторые поля, а не вся запись, вы можете написать что-то вроде:
FOR EACH customer FIELDS ( name balance ) NO-LOCK:
или:
FOR EACH customer EXCEPT ( photo ) NO-LOCK:
Вы уже используете FIELDS, и ваш пример запросапростой NO-LOCK, поэтому он должен существенно выиграть от предложенных настроек параметров.