Sto studiando utilizzando il READPASTsuggerimento per ridurre il blocco delle risorse nel sottosistema finanziario della nostra applicazione.
Sembrava una buona strada da percorrere perché i record delle transazioni finanziarie vengono sempre aggiunti, mai aggiornati o eliminati. Le uniche righe che verrebbero mai ignorate sono le nuovissime righe inserite all'interno di una transazione; in effetti non esistono nel mondo esterno fino a quando la transazione non viene impegnata.
Tuttavia, ho notato prestazioni peggiori nelle query che utilizzano viste indicizzate su cui avevo messo il READPASTsuggerimento. Confrontando i piani di query, sembra che con il suggerimento, Query Optimizer sceglie di non utilizzare la vista indicizzata e invece ricorre a trattarla come una vista normale.
Non sono sicuro del perché; Immagino che le viste indicizzate siano come qualsiasi altro indice in quanto le chiavi possono essere bloccate durante le operazioni e l'aggiunta READPASTfunzionerebbe in modo simile.
SELECT TOP 1 isa.InvoiceId
FROM Financial_InvoiceSummaryAmounts isa WITH (READPAST)
WHERE isa.TotalOwedAmount = 0.0
SELECT TOP 1 isa.InvoiceId
FROM Financial_InvoiceSummaryAmounts isa
WHERE isa.TotalOwedAmount = 0.0
Anche l'aggiunta di un NOEXPANDsuggerimento sembra funzionare, ma sono interessato a saperne di più sul possibile motivo per cui READPASTl'ottimizzatore delle query ha fatto questa scelta in primo luogo (come parte di una risposta completa).



