24.11.2005, 13:08 | #1 |
Участник
|
<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 выполняет два запроса: сначала получает и сортирует датасет по оптимальному ключу, а потом снова получает тот же самый датасет, но уже по неоптимальному ключу, при этом перебирая всю таблицу - теряется смысл использования оптимального ключа в начале. Для чего нужно тогда кэширование? Как можно пересортировать данные в уже полученной выборке без того, чтобы снова создавать ту же самую выборку? |
|