如何通过 SalesInvoicesExploded 优化 SerialNumbers 的性能?

How optimize the performance of SerialNumbers by SalesInvoicesExploded?

我有以下查询:

select  sie.invoicedate         sie_invoicedate
,       sie.Silitem             sle_item
,       sie.Silitemcode         sle_itemcode
,       sie.Silitemdescription  sle_itemdescription
,       sie.Silnetprice         sle_netprice
,       sie.Silquantity         sle_quantity
,       sie.Silunitprice        sle_unitprice
,       ctr.ctr_code            ctr_code
,       ctr.ctr_name            ctr_name
,       ctr.parent_code         parent_code
,       ctr.parent_name         parent_name
,       gdlsn.ssrserialnumber   serialnumber
from    SalesInvoicesExploded sie
join    customers@inmemorystorage ctr
on      ctr.ctr_id = sie.invoiceto
join    GoodsDeliveryLineSerialNumbers gdlsn
on      gdlsn.salesorderlineid = sie.silid
where   sie.invoicedate >= '2016-01-01'
and     sie.invoicedate < '2016-01-03'
order
by      sie.invoicedate

如何只从日期范围内获取序列号?在调试器中,我看到很多对 Exact Online 的请求。

目前,没有很好的过滤器来获得您想要的结果。

问题是无法对数据集执行 gdlsn.salesorderlineid = sie.silid 筛选,除非数据集已从另一端获取。

只有特定的过滤器在服务器端执行(比如你的invoicedate >= '2016-01-01')。这在程序方面是一个相当棘手的问题。

如果您可以指定一个可以预先确定的过滤器,那么它会起作用,比如 GoodsDeliveryLineSerialNumbers.Created 中的日期总是在 invoicedate 之后。如果您可以根据该日期缩小集合范围,这将意味着显着的性能改进。

如果可能的话,我建议使用这样的东西:

select  sie.invoicedate         sie_invoicedate
,       sie.Silitem             sle_item
,       sie.Silitemcode         sle_itemcode
,       sie.Silitemdescription  sle_itemdescription
,       sie.Silnetprice         sle_netprice
,       sie.Silquantity         sle_quantity
,       sie.Silunitprice        sle_unitprice
,       ctr.ctr_code            ctr_code
,       ctr.ctr_name            ctr_name
,       ctr.parent_code         parent_code
,       ctr.parent_name         parent_name
,       gdlsn.ssrserialnumber   serialnumber
from    SalesInvoicesExploded     sie
join    customers@inmemorystorage ctr
on      ctr.ctr_id = sie.invoiceto
join    GoodsDeliveryLineSerialNumbers gdlsn
on      gdlsn.salesorderlineid = sie.silid
where   sie.invoicedate >= '2016-01-01'
and     sie.invoicedate < '2016-01-03'
-- add the following line, use a date that for sure will yield the rows:
and     gdlsn.created >= '2015-12-01'
--
order
by      sie.invoicedate