Есть задача - оптимизировать скорость получения остатков по всем ТМЦ.
Условия
- формат базы - DBF (объем базы - 3 гига).
- перевод с DBF в SQL невозможен по определенным причинам.
- в роли сервера - XP prof (тут лежит база)
- в роли клиента - 2000 prof
Испытания:
При запуске на сервере, тоесть в случае когда база локальная:
- прямой запрос - 3 секунды
- стандартный запрос 1С - 4 секунды
При запуске на рабочей станции, тоесть в случае когда база находится где-то в сети
- прямой запрос - 90 секунд !!!!!
- стандартный запрос 1С - 8 секунды
Ощущается непонятка. При запуске на сервере прямой запрос отрабатывает быстрее, а при запуске на рабочей станции запрос отрабатывает медленнее.
Вопрос. В ЧЕМ ПРИЧИНА ???.
Прошу гуру выразить своё мнение по этому поводу.
Вот текст запроса:
|SELECT | Рег.Товар as [ТМЦ $Справочник.Запаси], | SUM(Рег.КоличествоОстаток) as Кількість |FROM | (SELECT | $Р.ТМЦ AS Товар, | $Р.Кількість AS КоличествоОстаток | FROM | $РегистрИтоги.ЗапасиК as Р | WHERE | (period = :ПредМесяц~~) | AND ($Р.Склад = :Склад) | | UNION ALL | | SELECT | $Р.ТМЦ AS Товар, | $Р.Кількість * (1 - Р.debkred * 2) AS КоличествоОстаток | FROM | $Регистр.ЗапасиК AS Р | INNER JOIN | 1sjourn jr ON Р.iddoc = jr.iddoc | AND (jr.date >= :НачалоМесяца~~) | AND ($ФлагРегистра.ЗапасиК = 1) | WHERE | ($Р.Склад = :Склад) | ) Рег |GROUP BY | Рег.Товар |";
и, соответственно, стандартный запрос 1С: "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |ПОб = Регистр.ЗапасиК.ПОб; |Склад = Регистр.ЗапасиК.Склад; |Кількість = Регистр.ЗапасиК.Кількість; |ТМЦ = Регистр.ЗапасиК.ТМЦ; |Функция КількістьКонОст = КонОст(Кількість); |Группировка ТМЦ без групп; |Условие(ПОб = Перечисление.ТакНі.Так); |Условие(Склад = ВыбСклад);
|