2016-11-14 73 views
3

我有以下查询:如何通过SalesInvoicesExploded优化SerialNumbers的性能?

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 [email protected] 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的请求。

+1

嗨弗兰克。你能解释一下你的陈述出了什么问题吗? –

+0

我如何才能从日期范围中获取serialnumbers,在debuger中,我看到很多请求到精确在线。 –

+0

请注意,您在'gdlsn.salesorderlineid = sie.silid'中加入错误的两列。左侧是销售订单ID,右侧是销售发票行ID。 –

回答

1

现在,没有一个很好的过滤器可能性来得到你想要的结果。

问题是没有办法在数据集上执行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 [email protected] 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 
+0

我执行了查询但没有结果,所有GoodsDeliveryLineSerialNumbers都被提取但没有匹配。关键silid是否正确? –

+0

我想任意过滤器'gdlsn.created> ='2016-01-01''没有得到任何结果。我不能肯定地说,这将产生如上所述的预期结果。是否有确定可以添加为过滤器的日期? –

+0

查询仍然没有结果。我已将日期范围更改为:where sie.invoicedate> ='2016-01-01' and sie.invoicedate''2016-02-01' - 添加以下行: 和gdlsn.created> =' 2016-01-01' –