Estoy investigando el uso de la READPAST
sugerencia para reducir el bloqueo de recursos en el subsistema financiero de nuestra aplicación.
Parecía un buen camino porque los registros de transacciones financieras solo se agregan, nunca se actualizan o eliminan. Las únicas filas que alguna vez se omitirán son filas completamente nuevas insertadas dentro de una transacción; efectivamente no existen en el mundo exterior hasta que se confirma la transacción.
Sin embargo, noté un peor rendimiento en las consultas que utilizan vistas indexadas en las que había puesto la READPAST
pista. Al comparar los planes de consulta, parece que con la sugerencia, el optimizador de consultas elige no usar la vista indexada y, en cambio, recurre a tratarla como una vista normal.
No estoy seguro de por qué sería eso; Me imagino que las vistas indexadas son como cualquier otro índice, ya que las teclas se pueden bloquear durante las operaciones y agregar READPAST
funcionaría de manera similar.
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
Agregar una NOEXPAND
pista también parece funcionar, pero estoy interesado en aprender más sobre posiblemente por qué READPAST
el optimizador de consultas tomó esa decisión en primer lugar (como parte de una respuesta completa).