Estou investigando usando a READPAST
dica para reduzir o bloqueio de recursos no subsistema financeiro de nosso aplicativo.
Parecia um bom caminho a percorrer, porque os registros de transações financeiras são sempre adicionados, nunca atualizados ou excluídos. As únicas linhas que seriam ignoradas são as novas linhas inseridas dentro de uma transação; eles efetivamente não existem no mundo externo até que a transação seja confirmada.
No entanto, notei um desempenho pior em consultas que utilizam exibições indexadas nas quais eu havia colocado a READPAST
dica. Comparando os planos de consulta, parece que com a dica, o otimizador de consulta opta por não usar a exibição indexada e volta a tratá-la como uma exibição normal.
Não sei por que isso seria; Eu imagino que as exibições indexadas sejam como qualquer outro índice, pois as chaves podem ser bloqueadas durante as operações e a adição READPAST
funcionaria da mesma forma.
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
A adição de uma NOEXPAND
dica também parece funcionar, mas estou interessado em aprender mais sobre o motivo READPAST
pelo qual o otimizador de consulta fez essa escolha em primeiro lugar (como parte de uma resposta completa).