Query op af te drukken Exact Online SalesInvoices erg langzaam

We gebruiken een query om de af te drukken verkoopfacturen te bepalen op Exact Online. Dit duurt nu ruim een minuut in plaats van hoogstens enkele seconden.

Hoe komt dat?

create or replace table invoicestoprint@inmemorystorage
as
select /*+ http_disk_cache(false) http_memory_cache(false) */
       sie.InvoiceID
,      sie.AmountDC
,      sie.InvoiceDate
,      sie.InvoiceToName
,      sie.OrderNumber
,      sie.YourRef
,      sie.Description
,      sie.Currency
,      'nl' lge_code
,      lyt.id
       emaillayoutid
       label 'Email Layout ID'
from   exactonlinerest..salesinvoices@eol sie
join   AccountsIncremental@eol act
on     act.id = sie.invoiceto
left
outer
join   exactonlinerest..layouts@eol lyt
on     lyt.division = sie.division
and    lyt.[type] = 2
and    lyt.subject
       =
       case
       when act.language in ('NL', 'EN')
       then act.language
       else 'EN'
       end
       || ' Begeleidend schrijven verkoopfactuur'
where  sie.status = 20 /* Not printed. */
and    sie.ordernumber in
       (...)

Het afdrukken gaat met:

insert into PrintedSalesInvoices@eol
( invoiceid
, sendemailtocustomer
)
select invoiceid
,      false
from   invoicestoprint@inmemorystorage

Exact Online heeft de API aangepast waardoor het niet meer mogelijk is om te filteren op de afdrukstatus. De niet-afgedrukte facturen zijn meestal maar enkele procenten van het totale aantal. Zij-effect van de invoering van “mandatory filtering” is dat hierbij ook het aantal velden waarop gefilterd kan worden sterk beperkt is; zie bijvoorbeeld Coping with mandatory filtering on Exact Online.

De Invantive SQL-engine herschrijft de query onderwater om te voldoen aan de mandatory filtering-eis, maar de prestaties zijn beroerd en het aantal benodigde API-calls stijgt hierdoor.

Advies is de query te herschrijven naar het gebruik van SalesInvoiceLinesIncremental, waarbij gefilterd wordt op LineNumber = 0 and status = 20.

Doordat de Invantive SQL-engine de tussenstand van *Incremental versleuteld opslaat is dit voor een klein aantal records niet echt snel, maar in ieder geval sneller dan het gebruik van ExactOnlineREST..SalesInvoices.