提高 Exact Online 上 WareHouse 查询的性能
Improve performance of WareHouse query on Exact Online
我们有 20 个仓库和 3.000 件物品。因此,Exact Online 的 ItemWarehouses table 中有 60.000 行。但是,每60行检索需要1200毫秒,因此对该数据量进行仓库分析的总查询需要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 个组合并在 PC 上过滤它们。最后的结果是大约 700 个仓库和物料库存信息的有效组合。
有没有办法以更高效的方式检索数据?
Invantive SQL 不会将 OR 构造转发到服务器端。但在这种情况下,您可能希望将 OR 更改为 UNION(没有 ALL):
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 确保您只返回唯一的行。
我们有 20 个仓库和 3.000 件物品。因此,Exact Online 的 ItemWarehouses table 中有 60.000 行。但是,每60行检索需要1200毫秒,因此对该数据量进行仓库分析的总查询需要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 个组合并在 PC 上过滤它们。最后的结果是大约 700 个仓库和物料库存信息的有效组合。
有没有办法以更高效的方式检索数据?
Invantive SQL 不会将 OR 构造转发到服务器端。但在这种情况下,您可能希望将 OR 更改为 UNION(没有 ALL):
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 确保您只返回唯一的行。