Показать сообщение отдельно
Старый 29.01.2004, 10:38   #19  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,713 / 1201 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
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 - ничего не ясно. Хотя тут я не уверен.