Badam za pomocą READPAST
podpowiedzi, aby zmniejszyć blokowanie zasobów w podsystemie finansowym naszej aplikacji.
Wydawało się, że to dobra droga, ponieważ zapisy transakcji finansowych są tylko dodawane, nigdy nie aktualizowane ani usuwane. Jedynymi wierszami, które można kiedykolwiek pominąć, są nowe wiersze wstawione do transakcji; faktycznie nie istnieją w świecie zewnętrznym, dopóki transakcja nie zostanie zatwierdzona.
Zauważyłem jednak gorszą wydajność zapytań korzystających z widoków indeksowanych, o których wspomniałem READPAST
. Porównując plany zapytań, wygląda to tak, jak ze wskazówką, optymalizator zapytań decyduje się nie używać widoku indeksowanego, a zamiast tego powraca do traktowania go jak zwykłego widoku.
Nie jestem pewien, dlaczego tak byłoby; Wyobrażam sobie, że indeksowane widoki są jak każdy inny indeks w tym, że klucze mogą być blokowane podczas operacji, a dodawanie READPAST
działałoby podobnie.
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
NOEXPAND
Wydaje się, że dodanie podpowiedzi również działa, ale interesuje mnie więcej informacji na temat tego, dlaczego READPAST
optymalizator zapytań dokonał tego wyboru w pierwszej kolejności (w ramach pełnej odpowiedzi).