AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.11.2005, 13:08   #1  
DeSp is offline
DeSp
Участник
 
41 / 10 (1) +
Регистрация: 27.09.2005
<div class='CALtop'>C/AL</div><div class='CAL'>.......
TableWarehouseActivityLine.RESET;
TableWarehouseActivityLine.SETCURRENTKEY("Whse. Document No.","Whse. Document Type","Activity Type");
TableWarehouseActivityLine.SETRANGE("Whse. Document No.",TableWarehouseShipmentHeader."No.");
TableWarehouseActivityLine.SETRANGE("Whse. Document Type",TableWarehouseActivityLine."Whse. Document Type"::Shipment);
TableWarehouseActivityLine.SETRANGE("Activity Type",TableWarehouseActivityLine."Activity Type"::Pick)
  IF TableWarehouseActivityLine.FIND('-') THEN BEGIN
       TableWarehouseActivityLine.SETCURRENTKEY("Activity Type","No.","Line No.");
      IF TableWarehouseActivityLine.FIND('-') THEN;
.......
</div>
Есть датасет, отфильтрованный и отсортированный по ключу (Whse. Document No., Whse. Document Type, Activity Type). Далее надо только отсортировать этот датасет в другом порядке и по другим полям (Activity Type, No., Line No.). Способ, который привожу в коде, приводит к тому, что SQL Server выполняет два запроса: сначала получает и сортирует датасет по оптимальному ключу, а потом снова получает тот же самый датасет, но уже по неоптимальному ключу, при этом перебирая всю таблицу - теряется смысл использования оптимального ключа в начале. Для чего нужно тогда кэширование?
Как можно пересортировать данные в уже полученной выборке без того, чтобы снова создавать ту же самую выборку?
Старый 24.11.2005, 13:12   #2  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Я бы не заморачивался и сразу сортировал в нужном порядке ..
Старый 24.11.2005, 13:51   #3  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Скорее всего забыли об оптимизации под SQL сервер .
В Вашем случае имеет возможно имеет смысл добавить "No.","Line No." в конец ключа Whse. Document No.","Whse. Document Type","Activity Type" и убрать TableWarehouseActivityLine.SETCURRENTKEY("Activity Type","No.","Line No.") из кода
Старый 24.11.2005, 13:58   #4  
DeSp is offline
DeSp
Участник
 
41 / 10 (1) +
Регистрация: 27.09.2005
rmv, наоборот - именно и занимаюсь оптимизацией под него .
То, что можно сделать редизайн ключа - это понятно. Но мне бы хотелось узнать какие-то другие варианты изменения порядка сортировки - в частности почему мой вариант приводит к дублированию выборки, а не действиям над ней в кэше.
Старый 24.11.2005, 15:14   #5  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Desp - забыли разработчики исходного кода .
В вашем случае использование временной таблицы возможно даст прирост в производительности. То есть после первого find('-') копируем данные данные во временную табличку и дальнейшие действия проводим с ней.
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:26.