Vadik
Как Вы получили эти числа в профайлере? У меня как я ни кручу профайлер ничего подобного не наблюдается (Axapta 2.5). В профайлере я вижу только дерево вызовов. Т.е. сколько времени на какую строку ушло.
Если судить по времени обработке строк, получается, что Statment фетчит по одной записи, а While Select по 24 за раз.
НО!
Если просуммировать время фетча для 24 строк Statmenta и сравнить с временем фетча для одной строки While Select, то я получаю примерно одинаковое значение.
Принципиальное расхождение по времени наблюдается именно на команде записи в текстовый файл! В моем случае на 2 порядка.
Опять же, судя по плану выполнения запроса в профайлере индексы используются в обеих случаях. Точнее используется кластерный индекс. Собственно, этого и следовало ожидать. Здесь же идет голое сканирование строк в соответствии именно с кластерным индексом.
И еще, опять же судя по результатам профайлера, почему-то при выполнении Statment наблюдается повышенный обмен данными с сервером. У меня получились такие данные (только собственно цикл While):
Satment
Вызовов от клиента к серверу 0
Байт, от клиента к серверу 571969
Вызовов от сервера к клиенту 21001
Байт, от сервера к клиенту 1040040
While Select
Вызовов от клиента к серверу 0
Байт, от клиента к серверу 425451
Вызовов от сервера к клиенту 41
Байт, от сервера к клиенту 1435
Т.е. каким-то образом оптимизируется объем передаваемой информации. Единственная причина, которая приходит в голову - это информация о типах данных. О типах данных "родной" таблицы и так все известно, а вот о типах Satament - ничего не ясно. Хотя тут я не уверен.
|