J'étudie l'utilisation de l' READPAST
indice 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 READPAST
indice. 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 READPAST
fonctionnerait 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 NOEXPAND
indice semble également fonctionner, mais je souhaite en savoir plus sur les raisons pour lesquelles READPAST
l'optimiseur de requêtes a fait ce choix en premier lieu (dans le cadre d'une réponse complète).