У меня в SQL - профайлере получились такие результаты:
-) Statment
exec sp_cursorfetch 180150002, 2, 1, 1
exec sp_cursor 180150002, 40, 1
Всего, около 2000 команд общей продолжительностью 5 секунд
-) While select
exec sp_cursorfetch 180150001, 2, 1, 8
Всего около 125 команд общей продолжительностью 0.5 секунд
Т.е. если я правильно понял - это просто так работает Axapta, что из родных таблиц тянет данные бОльшими кусками
Тогда возвращаемся к тому, с чего началась данная тема:
При сложных выборках, когда не всю информацию можно получить из Query (требуются дополнительные сложные вычисления) есть путь кардинального (на порядок и больше) увеличения скорости получения выборки. Это то, что я описал в самом начале данной темы
-) Создать таблицу на сервере
-) Выполнить хранимую процедуру сервера по наполнению этой таблицы
-) Средствами Axapta сделать выброс из этой таблицы в текстовый файл
Правда в такой идеологии 2 большие проблемы:
-) Конвертация Query в синтаксис MS SQL
-) Генерация значений RecID в таблице
Но если базовый отчет средствами Axapta может выполнятся часами, то выполнение отчета напрямую на сервере сокращает это время до нескольких минут.
Вобщем теперь понятно, что происходит. Спасибо.
|