Повышение производительности запроса 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 гарантирует, что вы получите только уникальные строки.

Другие вопросы по тегам