Повышение производительности запроса WareHouse на Exact Online
У нас есть 20 складов и 3000 наименований. Поэтому в таблице ItemWarehouses Exact Online есть 60 000 строк. Однако получение занимает 1200 мс на 60 строк, поэтому общий запрос к этому объему данных для анализа хранилища занимает 3-4 часа.
Я попытался ограничить количество данных, полученных с помощью следующего фильтра, потому что мы находимся только в элементах с некоторой ненулевой информацией о запасах:
select t.*
from exactonlinerest..itemwarehouses t
where ( currentstock != 0 or projectedstock != 0 or plannedstockin != 0 or plannedstockout != 0 or safetystock != 0 or reorderpoint != 0)
Но он по-прежнему загружает все 60 000 комбинаций и фильтрует их на ПК. В итоге получается примерно 700 действительных комбинаций информации о складе и товаре.
Есть ли способ получить данные более производительным способом?
1 ответ
Invantive SQL не передает OR-конструкции на серверную часть. Но в этом случае вы можете изменить ИЛИ на СОЮЗ (без ВСЕХ):
select t.*
from exactonlinerest..itemwarehouses t
where currentstock != 0
union
select t.*
from exactonlinerest..itemwarehouses t
where projectedstock != 0
union
select t.*
from exactonlinerest..itemwarehouses t
where plannedstockin != 0
union
select t.*
from exactonlinerest..itemwarehouses t
where plannedstockin != 0
union
select t.*
from exactonlinerest..itemwarehouses t
where safetystock != 0
union
select t.*
from exactonlinerest..itemwarehouses t
where reorderpoint != 0
Эти фильтры перенаправляются в Exact Online и должны работать очень быстро с учетом вашего распределения данных. UNION гарантирует, что вы получите только уникальные строки.