Ich untersuche anhand des READPAST
Hinweises, die Ressourcensperrung im Finanzsubsystem unserer Anwendung zu verringern.
Es schien ein guter Weg zu sein, da Finanztransaktionsdatensätze immer nur hinzugefügt, nie aktualisiert oder gelöscht werden. Die einzigen Zeilen, die jemals übersprungen würden, sind brandneue Zeilen, die in eine Transaktion eingefügt werden. Sie existieren praktisch nicht nach außen, bis die Transaktion festgeschrieben ist.
Bei Abfragen mit indizierten Ansichten, auf die ich den READPAST
Hinweis gesetzt hatte, bemerkte ich jedoch eine schlechtere Leistung . Beim Vergleich der Abfragepläne sieht es so aus, als würde der Abfrageoptimierer die indizierte Ansicht nicht verwenden und stattdessen darauf zurückgreifen, sie wie eine normale Ansicht zu behandeln.
Ich bin mir nicht sicher, warum das so ist. Ich stelle mir indizierte Ansichten wie jeden anderen Index vor, bei dem Schlüssel während des Betriebs gesperrt werden können und das Hinzufügen READPAST
ähnlich funktionieren würde.
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
Das Hinzufügen eines NOEXPAND
Hinweises scheint ebenfalls zu funktionieren, aber ich bin daran interessiert, mehr darüber zu erfahren, warum READPAST
das Abfrageoptimierungsprogramm diese Auswahl überhaupt getroffen hat (als Teil einer vollständigen Antwort).