Ich verwende eine SQL Server-indizierte Ansicht, um die Leistung eines Joins zu verbessern, der eine (sehr) große Tabelle nach einer Kategorie in einer kleinen Tabelle filtert. z.B:
CREATE VIEW BigTableSubset WITH SCHEMABINDING
AS
SELECT b.ID, b.SomeValue from BigTable b
INNER JOIN SmallTable s on (b.CategoryFK = s.CategoryPK)
where s.Type = 'Blah'
CREATE UNIQUE CLUSTERED INDEX PK_BigTableSubset ON BigTableSubset
(ID)
INCLUDE (SomeValue)
(BigTable.ID ist die PK auf BigTable)
Die Abfrageleistung wesentlich erhöht wird (da die Teilmenge von BigTable erforderlich ist bereits gespeichert), aber ich bin besorgt um sicherzustellen , dass SQL den Index selbst in optimaler Art und Weise aktualisieren kann , wenn entweder die Quellentabellen aktualisiert wird.
Die Frage ist also: Muss ich SmallTable.CategoryPK in den Clustered-Index der Ansicht aufnehmen, um dies sicherzustellen, oder wird SQL dies automatisch als Teil der Indexstruktur tun? Oder anders ausgedrückt: Wie erkennt SQL, welche Seiten im Index jedes Mal aktualisiert werden müssen, wenn eine Tabelle für die linke Hand (SmallTable) aktualisiert wird, und muss ich etwas tun, um dies zu erleichtern?