I indizierte Sicht erstellt (gruppierten eindeutigen Index für Table1_ID
) Ansicht mit einem solchen T-SQL:Verständnis indizierte Sicht Update qnd Abfrageprozess in SQL Server 2008 R2
Select Table1_ID, Count_BIG(*) as Table2TotalCount from Table2 inner join
Table1 inner join... where Table2_DeletedMark=0 AND ... Group BY Table1_ID
Auch nach der Erstellung der Ansicht, setzen wir einzigartige geclusterte Index für Spalte Table1_ID. ein schwer ist, weil die Gruppe durch und mehrere Millionen von Zeilen in Tabelle 2
Table1_ID
Table2TotalCount
T-SQL-Code für Ansicht zu erstellen:
So Ansicht besteht aus zwei Spalten.
Aber wenn ich eine Anfrage an eine Ansicht wie
Select Total2TotalCount from MyView where Table1_ID = k
laufen - es führt schnell und ohne Aufwand für Server.
Auch in t-sql zum Erstellen von Ansicht viele Bedingungen in Where-Klausel für Table2
Spalten. Und Wenn ich geändert Table2_DeletedMark 1 und führen eine Abfrage
Select Total2TotalCount from MyView where Table1_ID = k
wieder - ich werde korrekte Ergebnisse erhalten. (Table2TotalCount
um 1 verringert).
Also unsere Fragen sind:
1. Warum Abfrageausführungszeit verringert, so viel, wenn wir indizierte Sicht verwendet (um ohne Ansicht vergleichen mit (selbst laufen wir DBCC DROPCLEANBUFFERS()
vor Ausführung der Abfrage zu sehen))
2. Nach dem Ändern
Table2_DeletedMark
Ansicht sofort neu berechnet und wir bekommen korrekte Ergebnisse, aber was ist der Prozess dahinter? Wir können uns nicht vorstellen, dass sql t-sql ausführt, indem die Ansicht jedes Mal generiert wird, wenn wir Werte von 10 Spalten, die in der t-sql-Ansicht enthalten, ändern, weil sie zu schwer ist.
Wir verstehen, dass es ausreicht, eine einfache Abfrage auszuführen, um Werte neu zu berechnen, abhängig von Spaltenwerten, die wir ändern.
Aber wie versteht es SQL?
Ich verstehe, dass die indizierte Sicht materialisiert ist. Die Hauptfrage ist unsere zweite Frage. Ich frage mich, ob ein Mechanismus funktioniert, der "immer dann aktualisiert wird, wenn sich die zugrunde liegenden Tabellen ändern". Wie es funktioniert ? Können Sie erklären, Frage 2 –
@ mmcteam.com.au: anders als jemand aus dem SQL Server-Team, ich glaube nicht, dass jemand wirklich im Detail erklären kann, wie das funktioniert. Ich weiß einfach, dass es funktioniert - die indizierte Sicht wird immer dann aktualisiert, wenn eine der zugrunde liegenden Tabellen geändert wird. Das ist alles, was ich selbst wissen muss :-) –