14.12.2005, 15:41 | #1 |
Участник
|
Ускорить расчет
Пакетной обработкой считается средняя реализация понедельно...
Очень долго идет выборка записей, не подскажите есть ли средства ускорения расчета, в частности выборки (while select) |
|
14.12.2005, 15:59 | #2 |
Участник
|
если вопрос ставится настолько обобщенно, то и ответ общий - переносите сложную обработку на сервер приложений (AOS).
|
|
14.12.2005, 17:46 | #3 |
Участник
|
Профайлер не запускали? Там же все видно. Чаще всего индексов не хватает, или они например могут не работать (на оракле).
|
|
15.12.2005, 07:56 | #4 |
Участник
|
Да, извините .... вопрос некорректно поставил.
Таблица SalesLine. Рассчитываем среднюю реализацию понедельно. То есть с сегодняшнего дня до начала недели .. потом понедельно. Средняя реализация расчитывается как сумма реализации / количество дней в которых была реализация. Обратил внимание что while select сначала отбирает весь набор записей за определенный период, тока потом начинает отрабатывать расчет. СУБД - Oracle. |
|
15.12.2005, 09:25 | #5 |
Участник
|
Приведите свой запрос, а то вопрос опять получается общим.
Пока только общие соображения: Какие поля у вас входят в ORDER BY? Входят ли они в какой-либо индекс?
__________________
Axapta v.3.0 sp5 kr2 |
|
15.12.2005, 09:45 | #6 |
Участник
|
Код: while select itemId, inventDimId from salesLine group by itemid,inventDimId where salesLine.dataAreaId == 'dat' && salesLine.SalesStatus == SalesStatus::Invoiced && salesLine.ConfirmedDlv >= startDate && salesLine.ConfirmedDlv <= endDate |
|
15.12.2005, 10:12 | #7 |
Участник
|
Цитата:
Обратил внимание что while select сначала отбирает весь набор записей за определенный период, тока потом начинает отрабатывать расчет.
План запроса смотрели? Индексы работают? |
|
15.12.2005, 10:44 | #8 |
Участник
|
Может, вам создать индекс на SalesLine по полям (ItemId, InventdimId, SalesStatus, ConfirmedDlv)?
И условие 'where dataareaid == ' - не нужно. Axapta автоматически поставит его в запрос в качестве первого условия. И в индекс dataareaid попадёт первым полем. |
|
15.12.2005, 10:52 | #9 |
Microsoft Dynamics
|
Попробуйте перестроить вышеуказанный запрос следующим образом:
Код: select itemId, inventDimId from salesLine group by itemId, inventDimId exists join salesTable where salesTable.SalesId == salesLine.SalesId && salesTable.SalesStatus == SalesStatus::Invoiced && salesLine.dataAreaId == 'dat' && salesLine.ConfirmedDlv >= startDate && salesLine.ConfirmedDlv <= endDate; |
|
15.12.2005, 11:05 | #10 |
----------------
|
Самый лучший способ ускорить запрос - избавиться от него...
Мне не понятно почему берутся строки заказов, а не накладных, почему берется InvnentDimId, который может сильно не совпадать с реальной аналитикой проводок. Вобщем, подумайте нужен ли вам этот запрос |
|