如何通过 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
我有以下查询:
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