J'étudie l'utilisation de l' READPASTindice pour réduire le verrouillage des ressources dans le sous-système financier de notre application.
Cela semblait être une bonne façon de procéder, car les enregistrements de transactions financières ne sont jamais ajoutés, jamais mis à jour ou supprimés. Les seules lignes qui pourraient être ignorées sont les nouvelles lignes insérées à l'intérieur d'une transaction; ils n'existent effectivement pas dans le monde extérieur tant que la transaction n'est pas validée.
Cependant, j'ai remarqué des performances moins bonnes sur les requêtes qui utilisent des vues indexées sur lesquelles j'avais donné un READPASTindice. En comparant les plans de requête, il semble qu'avec l'indicateur, l'optimiseur de requête choisit de ne pas utiliser la vue indexée et revient à la traiter comme une vue normale.
Je ne sais pas pourquoi ce serait; J'imagine que les vues indexées sont comme tout autre index dans la mesure où les clés peuvent être verrouillées pendant les opérations et l'ajout READPASTfonctionnerait de la même manière.
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
L'ajout d'un NOEXPANDindice semble également fonctionner, mais je souhaite en savoir plus sur les raisons pour lesquelles READPASTl'optimiseur de requêtes a fait ce choix en premier lieu (dans le cadre d'une réponse complète).



