Sto studiando utilizzando il READPAST
suggerimento 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 READPAST
suggerimento. 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 READPAST
funzionerebbe 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 NOEXPAND
suggerimento sembra funzionare, ma sono interessato a saperne di più sul possibile motivo per cui READPAST
l'ottimizzatore delle query ha fatto questa scelta in primo luogo (come parte di una risposta completa).